Skip to content

Commit 5322695

Browse files
committed
Merge pull request #6649 from pydata/platform_sort
PLAT: platform sorting issue surfaced with time_grouper
2 parents f59e33c + 7a05ee8 commit 5322695

File tree

3 files changed

+12
-7
lines changed

3 files changed

+12
-7
lines changed

pandas/core/groupby.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def __new__(cls, *args, **kwargs):
169169
cls = TimeGrouper
170170
return super(Grouper, cls).__new__(cls)
171171

172-
def __init__(self, key=None, level=None, freq=None, axis=None, sort=True):
172+
def __init__(self, key=None, level=None, freq=None, axis=None, sort=False):
173173
self.key=key
174174
self.level=level
175175
self.freq=freq
@@ -201,7 +201,7 @@ def get_grouper(self, obj):
201201
self.set_grouper(obj)
202202
return self.binner, self.grouper, self.obj
203203

204-
def set_grouper(self, obj):
204+
def set_grouper(self, obj, sort=False):
205205
"""
206206
given an object and the specifcations, setup the internal grouper for this particular specification
207207
@@ -243,7 +243,7 @@ def set_grouper(self, obj):
243243
raise ValueError("The grouper level {0} is not valid".format(level))
244244

245245
# possibly sort
246-
if not ax.is_monotonic:
246+
if (self.sort or sort) and not ax.is_monotonic:
247247
indexer = self.indexer = ax.argsort(kind='quicksort')
248248
ax = ax.take(indexer)
249249
obj = obj.take(indexer, axis=self.axis, convert=False, is_copy=False)
@@ -1608,6 +1608,7 @@ def __init__(self, index, grouper=None, obj=None, name=None, level=None,
16081608
self.grouper = _convert_grouper(index, grouper)
16091609
self.index = index
16101610
self.sort = sort
1611+
self.obj = obj
16111612

16121613
# right place for this?
16131614
if isinstance(grouper, (Series, Index)) and name is None:
@@ -1684,7 +1685,8 @@ def __init__(self, index, grouper=None, obj=None, name=None, level=None,
16841685
elif isinstance(self.grouper, Grouper):
16851686

16861687
# get the new grouper
1687-
grouper = self.grouper.get_binner_for_grouping(obj)
1688+
grouper = self.grouper.get_binner_for_grouping(self.obj)
1689+
self.obj = self.grouper.obj
16881690
self.grouper = grouper
16891691
if self.name is None:
16901692
self.name = grouper.name

pandas/core/index.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -883,7 +883,10 @@ def argsort(self, *args, **kwargs):
883883
"""
884884
See docstring for ndarray.argsort
885885
"""
886-
return self.view(np.ndarray).argsort(*args, **kwargs)
886+
result = self.asi8
887+
if result is None:
888+
result = self.view(np.ndarray)
889+
return result.argsort(*args, **kwargs)
887890

888891
def __add__(self, other):
889892
if isinstance(other, Index):

pandas/tseries/resample.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ def __init__(self, freq='Min', closed=None, label=None, how='mean',
7070
self.limit = limit
7171
self.base = base
7272

73-
# by definition we always sort
73+
# always sort time groupers
7474
kwargs['sort'] = True
7575

7676
super(TimeGrouper, self).__init__(freq=freq, axis=axis, **kwargs)
7777

7878
def resample(self, obj):
79-
self.set_grouper(obj)
79+
self.set_grouper(obj, sort=True)
8080
ax = self.grouper
8181

8282
if isinstance(ax, DatetimeIndex):

0 commit comments

Comments
 (0)