+41
-20
lines changedFilter options
+41
-20
lines changed Original file line number Diff line number Diff line change
@@ -341,8 +341,7 @@ def apply(self, other):
341
341
342
342
@classmethod
343
343
def onOffset(cls, dt):
344
-
firstDay, _ = lib.monthrange(dt.year, dt.month)
345
-
return dt.day == (firstDay + 1)
344
+
return dt.day == 1
346
345
347
346
@property
348
347
def rule_code(self):
@@ -397,6 +396,16 @@ def apply(self, other):
397
396
result = datetime(other.year, other.month, first)
398
397
return result
399
398
399
+
@classmethod
400
+
def onOffset(cls, dt):
401
+
first_weekday, _ = lib.monthrange(dt.year, dt.month)
402
+
if first_weekday == 5:
403
+
return dt.day == 3
404
+
elif first_weekday == 6:
405
+
return dt.day == 2
406
+
else:
407
+
return dt.day == 1
408
+
400
409
@property
401
410
def rule_code(self):
402
411
return 'BMS'
Original file line number Diff line number Diff line change
@@ -105,20 +105,7 @@ def _get_time_bins(self, axis):
105
105
trimmed = True
106
106
107
107
ax_values = axis.asi8
108
-
bin_edges = binner.asi8
109
-
110
-
# Some hacks for > daily data, see #1471, #1458
111
-
if self.freq != 'D' and is_superperiod(self.freq, 'D'):
112
-
day_nanos = _delta_to_nanoseconds(timedelta(1))
113
-
if self.closed == 'right':
114
-
bin_edges = bin_edges + day_nanos - 1
115
-
else:
116
-
bin_edges = bin_edges + day_nanos
117
-
118
-
# intraday values on last day
119
-
if bin_edges[-2] > ax_values[-1]:
120
-
bin_edges = bin_edges[:-1]
121
-
binner = binner[:-1]
108
+
binner, bin_edges = self._adjust_bin_edges(binner, ax_values)
122
109
123
110
# general version, knowing nothing about relative frequencies
124
111
bins = lib.generate_bins_dt64(ax_values, bin_edges, self.closed)
@@ -137,6 +124,25 @@ def _get_time_bins(self, axis):
137
124
138
125
return binner, bins, labels
139
126
127
+
def _adjust_bin_edges(self, binner, ax_values):
128
+
# Some hacks for > daily data, see #1471, #1458, #1483
129
+
130
+
bin_edges = binner.asi8
131
+
132
+
if self.freq != 'D' and is_superperiod(self.freq, 'D'):
133
+
day_nanos = _delta_to_nanoseconds(timedelta(1))
134
+
if self.closed == 'right':
135
+
bin_edges = bin_edges + day_nanos - 1
136
+
else:
137
+
bin_edges = bin_edges + day_nanos
138
+
139
+
# intraday values on last day
140
+
if bin_edges[-2] > ax_values[-1]:
141
+
bin_edges = bin_edges[:-1]
142
+
binner = binner[:-1]
143
+
144
+
return binner, bin_edges
145
+
140
146
def _get_time_period_bins(self, axis):
141
147
assert(isinstance(axis, DatetimeIndex))
142
148
Original file line number Diff line number Diff line change
@@ -422,6 +422,7 @@ def test_onOffset(self):
422
422
423
423
tests = [(BMonthBegin(), datetime(2007, 12, 31), False),
424
424
(BMonthBegin(), datetime(2008, 1, 1), True),
425
+
(BMonthBegin(), datetime(2001, 4, 2), True),
425
426
(BMonthBegin(), datetime(2008, 3, 3), True)]
426
427
427
428
for offset, date, expected in tests:
Original file line number Diff line number Diff line change
@@ -440,7 +440,7 @@ def test_monthly_resample_error(self):
440
440
def test_resample_anchored_intraday(self):
441
441
# #1471, #1458
442
442
443
-
rng = pd.date_range('1/1/2012', '4/1/2012', freq='10min')
443
+
rng = date_range('1/1/2012', '4/1/2012', freq='10min')
444
444
df = DataFrame(rng.month, index=rng)
445
445
446
446
result = df.resample('M')
@@ -451,7 +451,7 @@ def test_resample_anchored_intraday(self):
451
451
expected = df.resample('M', kind='period', closed='left').to_timestamp()
452
452
tm.assert_frame_equal(result, expected)
453
453
454
-
rng = pd.date_range('1/1/2012', '4/1/2013', freq='10min')
454
+
rng = date_range('1/1/2012', '4/1/2013', freq='10min')
455
455
df = DataFrame(rng.month, index=rng)
456
456
457
457
result = df.resample('Q')
@@ -462,9 +462,14 @@ def test_resample_anchored_intraday(self):
462
462
expected = df.resample('Q', kind='period', closed='left').to_timestamp()
463
463
tm.assert_frame_equal(result, expected)
464
464
465
+
def test_resample_anchored_monthstart(self):
466
+
ts = _simple_ts('1/1/2000', '12/31/2002')
467
+
468
+
freqs = ['MS', 'BMS', 'QS-MAR', 'AS-DEC', 'AS-JUN']
469
+
470
+
for freq in freqs:
471
+
result = ts.resample(freq, how='mean')
465
472
466
-
rng = pd.date_range('1/1/2012', '4/1/2015', freq='10min')
467
-
df = DataFrame(rng.month, index=rng)
468
473
469
474
def _simple_ts(start, end, freq='D'):
470
475
rng = date_range(start, end, freq=freq)
You can’t perform that action at this time.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4