@@ -2270,6 +2270,83 @@ def test_get_axis(self):
2270
2270
assertRaisesRegexp(ValueError, 'No axis.*None', f._get_axis_name, None)
2271
2271
assertRaisesRegexp(ValueError, 'No axis named', f._get_axis_number, None)
2272
2272
2273
+ def test_asof(self):
2274
+ dates = date_range('2014/01/02', periods=4, freq='3D')
2275
+ df = pd.DataFrame(data={'a': ["a", None, "b", "c"],
2276
+ 'b': [1, None, 2, 3],
2277
+ 'c': [1, None, None, 3],
2278
+ 'd': [None, None, 2, 3]},
2279
+ index=dates)
2280
+
2281
+ test_dates = date_range('2014/01/01', periods=5, freq='3D')
2282
+
2283
+ # test using skipna = none, the simplest case
2284
+ result_skipna_none = df.asof(test_dates, skipna='none')
2285
+ # make sure the index matches
2286
+ self.assertTrue((result_skipna_none.index == test_dates).all())
2287
+ # compare with the expected frame
2288
+ expected_result = pd.DataFrame(data={'a': [None, "a", None, "b", "c"],
2289
+ 'b': [None, 1, None, 2, 3],
2290
+ 'c': [None, 1, None, None, 3],
2291
+ 'd': [None, None, None, 2, 3]},
2292
+ index=test_dates)
2293
+ assert_frame_equal(result_skipna_none, expected_result)
2294
+
2295
+ # test using skipna=any
2296
+ result_skipna_any = df.asof(test_dates, skipna='any')
2297
+ # compare with the expected result
2298
+ expected_result = pd.DataFrame(data={'a': [None, None, None, None, "c"],
2299
+ 'b': [None, None, None, None, 3],
2300
+ 'c': [None, None, None, None, 3],
2301
+ 'd': [None, None, None, None, 3]},
2302
+ index=test_dates)
2303
+ assert_frame_equal(result_skipna_any, expected_result)
2304
+
2305
+ result_skipna_all = df.asof(test_dates, skipna='all')
2306
+ # compare with expected result
2307
+ expected_result = pd.DataFrame(data={'a': [None, "a", "a", "b", "c"],
2308
+ 'b': [None, 1, 1, 2, 3],
2309
+ 'c': [None, 1, 1, None, 3],
2310
+ 'd': [None, None, None, 2, 3]},
2311
+ index=test_dates)
2312
+ assert_frame_equal(result_skipna_all, expected_result)
2313
+
2314
+ # finally the most complicated case, skipna=percolumn
2315
+ result_skipna_percolumn = df.asof(test_dates, skipna='percolumn')
2316
+ # compare with expected result
2317
+ expected_result = pd.DataFrame(data={'a': [None, "a", "a", "b", "c"],
2318
+ 'b': [None, 1, 1, 2, 3],
2319
+ 'c': [None, 1, 1, 1, 3],
2320
+ 'd': [None, None, None, 2, 3]},
2321
+ index=test_dates)
2322
+ assert_frame_equal(result_skipna_percolumn, expected_result)
2323
+
2324
+ # test calling with scalar values
2325
+ s1 = df.asof(test_dates[0], skipna='none')
2326
+ self.assertIsNone(s1.name)
2327
+ self.assertTrue(isnull(s1).all())
2328
+
2329
+ s2 = df.asof(test_dates[2], skipna='none')
2330
+ self.assertIsNone(s2.name)
2331
+ s2_expected = result_skipna_none.iloc[2, :]
2332
+ s2_expected.name = None
2333
+ assert_series_equal(s2_expected, s2)
2334
+
2335
+ s3 = df.asof(test_dates[2], skipna='any')
2336
+ self.assertIsNone(s3.name)
2337
+ self.assertTrue(isnull(s3).all())
2338
+
2339
+ s4 = df.asof(test_dates[2], skipna='all')
2340
+ self.assertIsNone(s4.name)
2341
+ s4_expected = result_skipna_all.iloc[2, :]
2342
+ s4_expected.name = None
2343
+ assert_series_equal(s4_expected, s4)
2344
+
2345
+ s5 = df.asof(test_dates[2], skipna='percolumn')
2346
+ self.assertIsNone(s5.name)
2347
+ s5_expected = df.apply(lambda s: s.asof(test_dates[2]))
2348
+ assert_series_equal(s5_expected, s5)
2349
+
2273
2350
def test_set_index(self):
2274
2351
idx = Index(np.arange(len(self.mixed_frame)))
2275
2352
0 commit comments