Skip to content

Commit e1552a6

Browse files
committed
BUG: fix searchsorted off by one error, close pandas-dev#1068
1 parent 219bdcb commit e1552a6

File tree

3 files changed

+12
-13
lines changed

3 files changed

+12
-13
lines changed

pandas/core/groupby.py

-4
Original file line numberDiff line numberDiff line change
@@ -1323,10 +1323,6 @@ def _get_index():
13231323
index = MultiIndex.from_tuples(keys, names=self.grouper.names)
13241324
else:
13251325
index = Index(keys, name=self.grouper.names[0])
1326-
# if len(keys) == self.grouper.ngroups:
1327-
# index = self.grouper.result_index
1328-
# else:
1329-
# index = Index(keys, name=self.grouper.names[0])
13301326
return index
13311327

13321328
if isinstance(values[0], Series):

pandas/core/index.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -1711,23 +1711,22 @@ def _partial_date_slice(self, reso, parsed):
17111711
if reso == 'year':
17121712
t1 = to_timestamp(datetime(parsed.year, 1, 1))
17131713
t2 = to_timestamp(datetime(parsed.year, 12, 31))
1714-
i1, i2 = np.searchsorted(self.asi8, [t1.value, t2.value])
1715-
return slice(i1, i2+1)
17161714
elif reso == 'month':
17171715
d = lib.monthrange(parsed.year, parsed.month)[1]
17181716
t1 = to_timestamp(datetime(parsed.year, parsed.month, 1))
17191717
t2 = to_timestamp(datetime(parsed.year, parsed.month, d))
1720-
i1, i2 = np.searchsorted(self.asi8, [t1.value, t2.value])
1721-
return slice(i1, i2+1)
17221718
elif reso == 'quarter':
17231719
qe = (((parsed.month - 1) + 2) % 12) + 1 # two months ahead
17241720
d = lib.monthrange(parsed.year, qe)[1] # at end of month
17251721
t1 = to_timestamp(datetime(parsed.year, parsed.month, 1))
17261722
t2 = to_timestamp(datetime(parsed.year, qe, d))
1727-
i1, i2 = np.searchsorted(self.asi8, [t1.value, t2.value])
1728-
return slice(i1, i2+1)
1723+
else:
1724+
raise KeyError
17291725

1730-
raise KeyError
1726+
stamps = self.asi8
1727+
left = stamps.searchsorted(t1.value, side='left')
1728+
right = stamps.searchsorted(t2.value, side='right')
1729+
return slice(left, right)
17311730

17321731
def get_value(self, series, key):
17331732
"""

pandas/tests/test_timeseries.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -548,10 +548,14 @@ def test_slice_year(self):
548548
dti = DatetimeIndex(freq='B', start=datetime(2005,1,1), periods=500)
549549

550550
s = Series(np.arange(len(dti)), index=dti)
551-
self.assertEquals(len(s['2005']), 261)
551+
result = s['2005']
552+
expected = s[s.index.year == 2005]
553+
assert_series_equal(result, expected)
552554

553555
df = DataFrame(np.random.rand(len(dti), 5), index=dti)
554-
self.assertEquals(len(df.ix['2005']), 261)
556+
result = df.ix['2005']
557+
expected = df[df.index.year == 2005]
558+
assert_frame_equal(result, expected)
555559

556560
def test_slice_quarter(self):
557561
dti = DatetimeIndex(freq='D', start=datetime(2000,6,1), periods=500)

0 commit comments

Comments
 (0)