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