@@ -2179,49 +2179,75 @@ def create_series(self):
2179
2179
return Series (np .arange (len (i )), index = i , name = 'pi' )
2180
2180
2181
2181
def test_asfreq_downsample (self ):
2182
+ # GH 12884, 15944
2182
2183
2183
- # series
2184
2184
s = self .create_series ()
2185
- expected = s .reindex (s .index .take (np .arange (0 , len (s .index ), 2 )))
2186
- expected .index = expected .index .to_timestamp ()
2187
- expected .index .freq = to_offset ('2D' )
2185
+ start = s .index [0 ].to_timestamp (how = 'start' )
2186
+ end = (s .index [- 1 ] + 1 ).to_timestamp (how = 'start' )
2188
2187
2189
- # this is a bug, this *should* return a PeriodIndex
2190
- # directly
2191
- # GH 12884
2188
+ new_index = date_range ( start = start , end = end , freq = '2D' , closed = 'left' )
2189
+ # series
2190
+ expected = s . to_timestamp (). reindex ( new_index ). to_period ( '2D' )
2192
2191
result = s .resample ('2D' ).asfreq ()
2193
2192
assert_series_equal (result , expected )
2193
+ result_kind_period = s .resample ('2D' , kind = 'period' ).asfreq ()
2194
+ assert_series_equal (result_kind_period , expected )
2194
2195
2195
2196
# frame
2196
2197
frame = s .to_frame ('value' )
2197
- expected = frame .reindex (
2198
- frame .index .take (np .arange (0 , len (frame .index ), 2 )))
2199
- expected .index = expected .index .to_timestamp ()
2200
- expected .index .freq = to_offset ('2D' )
2198
+ expected = frame .to_timestamp ().reindex (new_index ).to_period ('2D' )
2201
2199
result = frame .resample ('2D' ).asfreq ()
2202
2200
assert_frame_equal (result , expected )
2201
+ result_kind_period = frame .resample ('2D' , kind = 'period' ).asfreq ()
2202
+ assert_frame_equal (result_kind_period , expected )
2203
+
2204
+ def test_asfreq_downsample_kind_timestamp (self ):
2205
+ # series
2206
+ s = self .create_series ()
2207
+ expected = s .to_timestamp ().resample ('2D' ).asfreq ()
2208
+ result = s .resample ('2D' , kind = 'timestamp' ).asfreq ()
2209
+ assert_series_equal (result , expected )
2210
+
2211
+ # frame
2212
+ frame = s .to_frame ('value' )
2213
+ expected = frame .to_timestamp ().resample ('2D' ).asfreq ()
2214
+ result = frame .resample ('2D' , kind = 'timestamp' ).asfreq ()
2215
+ assert_frame_equal (result , expected )
2203
2216
2204
2217
def test_asfreq_upsample (self ):
2218
+ # GH 12884, 15944
2205
2219
2206
- # this is a bug, this *should* return a PeriodIndex
2207
- # directly
2208
- # GH 12884
2209
2220
s = self .create_series ()
2210
- new_index = date_range (s .index [0 ].to_timestamp (how = 'start' ),
2211
- (s .index [- 1 ] + 1 ).to_timestamp (how = 'start' ),
2212
- freq = '1H' ,
2213
- closed = 'left' )
2214
- expected = s .to_timestamp ().reindex (new_index ).to_period ()
2215
- result = s .resample ('1H' ).asfreq ()
2221
+ start = s .index [0 ].to_timestamp (how = 'start' )
2222
+ end = (s .index [- 1 ] + 1 ).to_timestamp (how = 'start' )
2223
+ for freq in ['1H' , '2H' ]:
2224
+ # check base frequency and frequency multiple
2225
+ new_index = date_range (start = start , end = end , freq = freq ,
2226
+ closed = 'left' )
2227
+ # series
2228
+ expected = s .to_timestamp ().reindex (new_index ).to_period (freq )
2229
+ result = s .resample (freq ).asfreq ()
2230
+ assert_series_equal (result , expected )
2231
+ result_kind_period = s .resample (freq , kind = 'period' ).asfreq ()
2232
+ assert_series_equal (result_kind_period , expected )
2233
+
2234
+ # frame
2235
+ frame = s .to_frame ('value' )
2236
+ expected = frame .to_timestamp ().reindex (new_index ).to_period (freq )
2237
+ result = frame .resample (freq ).asfreq ()
2238
+ assert_frame_equal (result , expected )
2239
+ result_kind_period = frame .resample (freq , kind = 'period' ).asfreq ()
2240
+ assert_frame_equal (result_kind_period , expected )
2241
+
2242
+ def test_asfreq_upsample_kind_timestamp (self ):
2243
+ s = self .create_series ()
2244
+ expected = s .to_timestamp ().resample ('1H' ).asfreq ()
2245
+ result = s .resample ('1H' , kind = 'timestamp' ).asfreq ()
2216
2246
assert_series_equal (result , expected )
2217
2247
2218
2248
frame = s .to_frame ('value' )
2219
- new_index = date_range (frame .index [0 ].to_timestamp (how = 'start' ),
2220
- (frame .index [- 1 ] + 1 ).to_timestamp (how = 'start' ),
2221
- freq = '1H' ,
2222
- closed = 'left' )
2223
- expected = frame .to_timestamp ().reindex (new_index ).to_period ()
2224
- result = frame .resample ('1H' ).asfreq ()
2249
+ expected = frame .to_timestamp ().resample ('1H' ).asfreq ()
2250
+ result = frame .resample ('1H' , kind = 'timestamp' ).asfreq ()
2225
2251
assert_frame_equal (result , expected )
2226
2252
2227
2253
def test_asfreq_fill_value (self ):
@@ -2333,12 +2359,11 @@ def test_basic_upsample(self):
2333
2359
ts = _simple_pts ('1/1/1990' , '6/30/1995' , freq = 'M' )
2334
2360
result = ts .resample ('a-dec' ).mean ()
2335
2361
2336
- resampled = result .resample ('D' , convention = 'end' ).ffill ()
2337
-
2338
- expected = result .to_timestamp ('D' , how = 'end' )
2339
- expected = expected .asfreq ('D' , 'ffill' ).to_period ()
2340
-
2341
- assert_series_equal (resampled , expected )
2362
+ for freq in ['D' , '2D' ]:
2363
+ resampled = result .resample (freq , convention = 'end' ).ffill ()
2364
+ expected = result .to_timestamp (freq , how = 'end' )
2365
+ expected = expected .asfreq (freq , 'ffill' ).to_period (freq )
2366
+ assert_series_equal (resampled , expected )
2342
2367
2343
2368
def test_upsample_with_limit (self ):
2344
2369
rng = period_range ('1/1/2000' , periods = 5 , freq = 'A' )
@@ -2409,10 +2434,13 @@ def test_resample_count(self):
2409
2434
series = pd .Series (1 , index = pd .period_range (start = '2000' ,
2410
2435
periods = 100 ))
2411
2436
result = series .resample ('M' ).count ()
2412
-
2413
2437
expected_index = pd .period_range (start = '2000' , freq = 'M' , periods = 4 )
2414
2438
expected = pd .Series ([31 , 29 , 31 , 9 ], index = expected_index )
2439
+ assert_series_equal (result , expected )
2415
2440
2441
+ result = series .resample ('2M' ).count ()
2442
+ expected_index = pd .period_range (start = '2000' , freq = '2M' , periods = 2 )
2443
+ expected = pd .Series ([31 + 29 , 31 + 9 ], index = expected_index )
2416
2444
assert_series_equal (result , expected )
2417
2445
2418
2446
def test_resample_same_freq (self ):
@@ -2560,7 +2588,17 @@ def test_resample_5minute(self):
2560
2588
rng = period_range ('1/1/2000' , '1/5/2000' , freq = 'T' )
2561
2589
ts = Series (np .random .randn (len (rng )), index = rng )
2562
2590
2591
+ expected = ts .to_timestamp ().resample ('5min' ).mean ().to_period ('5min' )
2563
2592
result = ts .resample ('5min' ).mean ()
2593
+ assert_series_equal (result , expected )
2594
+ result_kind_period = ts .resample ('5min' , kind = 'period' ).mean ()
2595
+ assert_series_equal (result_kind_period , expected )
2596
+
2597
+ def test_resample_5minute_kind_timestamp (self ):
2598
+ rng = period_range ('1/1/2000' , '1/5/2000' , freq = 'T' )
2599
+ ts = Series (np .random .randn (len (rng )), index = rng )
2600
+
2601
+ result = ts .resample ('5min' , kind = 'timestamp' ).mean ()
2564
2602
expected = ts .to_timestamp ().resample ('5min' ).mean ()
2565
2603
assert_series_equal (result , expected )
2566
2604
@@ -2781,6 +2819,34 @@ def test_evenly_divisible_with_no_extra_bins(self):
2781
2819
result = df .resample ('7D' ).sum ()
2782
2820
assert_frame_equal (result , expected )
2783
2821
2822
+ def test_loffset_returns_datetimeindex (self ):
2823
+ # make sure passing loffset returns DatetimeIndex in all cases
2824
+ # basic method taken from Base.test_resample_loffset_arg_type()
2825
+ df = self .create_series ().to_frame ('value' )
2826
+ expected_means = [df .values [i :i + 2 ].mean ()
2827
+ for i in range (0 , len (df .values ), 2 )]
2828
+ expected_index = self .create_index (df .index [0 ], periods = len (df .index ) /
2829
+ 2 , freq = '2D' )
2830
+
2831
+ # loffset coreces PeriodIndex to DateTimeIndex
2832
+ expected_index = expected_index .to_timestamp ()
2833
+ expected_index += timedelta (hours = 2 )
2834
+ expected = DataFrame ({'value' : expected_means }, index = expected_index )
2835
+
2836
+ for arg in ['mean' , {'value' : 'mean' }, ['mean' ]]:
2837
+ for kind_param in [None , 'period' , 'timestamp' ]:
2838
+ result_agg = (df .resample ('2D' , loffset = '2H' , kind = kind_param )
2839
+ .agg (arg ))
2840
+ with tm .assert_produces_warning (FutureWarning ,
2841
+ check_stacklevel = False ):
2842
+ result_how = df .resample ('2D' , how = arg , loffset = '2H' ,
2843
+ kind = kind_param )
2844
+ if isinstance (arg , list ):
2845
+ expected .columns = (pd .MultiIndex
2846
+ .from_tuples ([('value' , 'mean' )]))
2847
+ assert_frame_equal (result_agg , expected )
2848
+ assert_frame_equal (result_how , expected )
2849
+
2784
2850
2785
2851
class TestTimedeltaIndex (Base , tm .TestCase ):
2786
2852
_index_factory = lambda x : timedelta_range
0 commit comments