|
16 | 16 | import unittest
|
17 | 17 | import nose
|
18 | 18 |
|
19 |
| -from pandas.util.testing import assert_series_equal, assert_almost_equal |
| 19 | +from pandas.util.testing import (assert_series_equal, assert_almost_equal, |
| 20 | + assert_frame_equal) |
20 | 21 | import pandas.util.testing as tm
|
21 | 22 |
|
22 | 23 | bday = BDay()
|
@@ -99,10 +100,11 @@ def test_resample_basic(self):
|
99 | 100 |
|
100 | 101 | s = self.series
|
101 | 102 | result = s.resample('5Min', how='last')
|
102 |
| - grouper = TimeGrouper(Minute(5), closed='right', label='right') |
| 103 | + grouper = TimeGrouper(Minute(5), closed='left', label='left') |
103 | 104 | expect = s.groupby(grouper).agg(lambda x: x[-1])
|
104 | 105 | assert_series_equal(result, expect)
|
105 | 106 |
|
| 107 | + def test_resample_basic_from_daily(self): |
106 | 108 | # from daily
|
107 | 109 | dti = DatetimeIndex(start=datetime(2005,1,1), end=datetime(2005,1,10),
|
108 | 110 | freq='D', name='index')
|
@@ -150,11 +152,11 @@ def test_resample_basic(self):
|
150 | 152 |
|
151 | 153 | # to biz day
|
152 | 154 | result = s.resample('B', how='last')
|
153 |
| - self.assertEquals(len(result), 6) |
154 |
| - self.assert_((result.index.dayofweek == [0,1,2,3,4,0]).all()) |
155 |
| - self.assertEquals(result.irow(0), s['1/3/2005']) |
156 |
| - self.assertEquals(result.irow(1), s['1/4/2005']) |
157 |
| - self.assertEquals(result.irow(5), s['1/10/2005']) |
| 155 | + self.assertEquals(len(result), 7) |
| 156 | + self.assert_((result.index.dayofweek == [4,0,1,2,3,4,0]).all()) |
| 157 | + self.assertEquals(result.irow(0), s['1/2/2005']) |
| 158 | + self.assertEquals(result.irow(1), s['1/3/2005']) |
| 159 | + self.assertEquals(result.irow(5), s['1/9/2005']) |
158 | 160 | self.assert_(result.index.name == 'index')
|
159 | 161 |
|
160 | 162 | def test_resample_frame_basic(self):
|
@@ -234,30 +236,30 @@ def test_upsample_with_limit(self):
|
234 | 236 | def test_resample_ohlc(self):
|
235 | 237 | s = self.series
|
236 | 238 |
|
237 |
| - grouper = TimeGrouper(Minute(5), closed='right', label='right') |
| 239 | + grouper = TimeGrouper(Minute(5)) |
238 | 240 | expect = s.groupby(grouper).agg(lambda x: x[-1])
|
239 | 241 | result = s.resample('5Min', how='ohlc')
|
240 | 242 |
|
241 | 243 | self.assertEquals(len(result), len(expect))
|
242 | 244 | self.assertEquals(len(result.columns), 4)
|
243 | 245 |
|
244 |
| - xs = result.irow(-1) |
245 |
| - self.assertEquals(xs['open'], s[-5]) |
246 |
| - self.assertEquals(xs['high'], s[-5:].max()) |
247 |
| - self.assertEquals(xs['low'], s[-5:].min()) |
248 |
| - self.assertEquals(xs['close'], s[-1]) |
| 246 | + xs = result.irow(-2) |
| 247 | + self.assertEquals(xs['open'], s[-6]) |
| 248 | + self.assertEquals(xs['high'], s[-6:-1].max()) |
| 249 | + self.assertEquals(xs['low'], s[-6:-1].min()) |
| 250 | + self.assertEquals(xs['close'], s[-2]) |
249 | 251 |
|
250 |
| - xs = result.irow(1) |
251 |
| - self.assertEquals(xs['open'], s[1]) |
252 |
| - self.assertEquals(xs['high'], s[1:6].max()) |
253 |
| - self.assertEquals(xs['low'], s[1:6].min()) |
254 |
| - self.assertEquals(xs['close'], s[5]) |
| 252 | + xs = result.irow(0) |
| 253 | + self.assertEquals(xs['open'], s[0]) |
| 254 | + self.assertEquals(xs['high'], s[:5].max()) |
| 255 | + self.assertEquals(xs['low'], s[:5].min()) |
| 256 | + self.assertEquals(xs['close'], s[4]) |
255 | 257 |
|
256 | 258 | def test_resample_reresample(self):
|
257 | 259 | dti = DatetimeIndex(start=datetime(2005,1,1), end=datetime(2005,1,10),
|
258 | 260 | freq='D')
|
259 | 261 | s = Series(np.random.rand(len(dti)), dti)
|
260 |
| - bs = s.resample('B') |
| 262 | + bs = s.resample('B', closed='right', label='right') |
261 | 263 | result = bs.resample('8H')
|
262 | 264 | self.assertEquals(len(result), 22)
|
263 | 265 | self.assert_(isinstance(result.index.freq, offsets.DateOffset))
|
@@ -296,7 +298,8 @@ def _ohlc(group):
|
296 | 298 | freq='10s')
|
297 | 299 | ts = Series(np.random.randn(len(rng)), index=rng)
|
298 | 300 |
|
299 |
| - resampled = ts.resample('5min', how='ohlc') |
| 301 | + resampled = ts.resample('5min', how='ohlc', closed='right', |
| 302 | + label='right') |
300 | 303 |
|
301 | 304 | self.assert_((resampled.ix['1/1/2000 00:00'] == ts[0]).all())
|
302 | 305 |
|
@@ -394,7 +397,7 @@ def test_resample_base(self):
|
394 | 397 | ts = Series(np.random.randn(len(rng)), index=rng)
|
395 | 398 |
|
396 | 399 | resampled = ts.resample('5min', base=2)
|
397 |
| - exp_rng = date_range('1/1/2000 00:02:00', '1/1/2000 02:02', |
| 400 | + exp_rng = date_range('12/31/1999 23:57:00', '1/1/2000 01:57', |
398 | 401 | freq='5min')
|
399 | 402 | self.assert_(resampled.index.equals(exp_rng))
|
400 | 403 |
|
@@ -785,7 +788,7 @@ def test_resample_irregular_sparse(self):
|
785 | 788 | dr = date_range(start='1/1/2012', freq='5min', periods=1000)
|
786 | 789 | s = Series(np.array(100), index=dr)
|
787 | 790 | # subset the data.
|
788 |
| - subset = s[:'2012-01-04 07:00'] |
| 791 | + subset = s[:'2012-01-04 06:55'] |
789 | 792 |
|
790 | 793 | result = subset.resample('10min', how=len)
|
791 | 794 | expected = s.resample('10min', how=len).ix[result.index]
|
@@ -828,7 +831,7 @@ def test_resample_tz_localized(self):
|
828 | 831 | tz='Australia/Sydney')
|
829 | 832 | s = Series([1,2], index=idx)
|
830 | 833 |
|
831 |
| - result = s.resample('D') |
| 834 | + result = s.resample('D', closed='right', label='right') |
832 | 835 | ex_index = date_range('2001-09-21', periods=1, freq='D',
|
833 | 836 | tz='Australia/Sydney')
|
834 | 837 | expected = Series([1.5], index=ex_index)
|
@@ -892,6 +895,33 @@ def test_resample_weekly_bug_1726(self):
|
892 | 895 |
|
893 | 896 | # assert_series_equal(result, expected)
|
894 | 897 |
|
| 898 | + def test_default_right_closed_label(self): |
| 899 | + end_freq = ['D', 'Q', 'M', 'D'] |
| 900 | + end_types = ['M', 'A', 'Q', 'W'] |
| 901 | + |
| 902 | + for from_freq, to_freq in zip(end_freq, end_types): |
| 903 | + idx = DatetimeIndex(start='8/15/2012', periods=100, |
| 904 | + freq=from_freq) |
| 905 | + df = DataFrame(np.random.randn(len(idx), 2), idx) |
| 906 | + |
| 907 | + resampled = df.resample(to_freq) |
| 908 | + assert_frame_equal(resampled, df.resample(to_freq, closed='right', |
| 909 | + label='right')) |
| 910 | + |
| 911 | + def test_default_left_closed_label(self): |
| 912 | + others = ['MS', 'AS', 'QS', 'D', 'H'] |
| 913 | + others_freq = ['D', 'Q', 'M', 'H', 'T'] |
| 914 | + |
| 915 | + for from_freq, to_freq in zip(others_freq, others): |
| 916 | + idx = DatetimeIndex(start='8/15/2012', periods=100, |
| 917 | + freq=from_freq) |
| 918 | + df = DataFrame(np.random.randn(len(idx), 2), idx) |
| 919 | + |
| 920 | + resampled = df.resample(to_freq) |
| 921 | + assert_frame_equal(resampled, df.resample(to_freq, closed='left', |
| 922 | + label='left')) |
| 923 | + |
| 924 | + |
895 | 925 | class TestTimeGrouper(unittest.TestCase):
|
896 | 926 |
|
897 | 927 | def setUp(self):
|
|
0 commit comments