Skip to content

Commit 08643fc

Browse files
author
Marco Gorelli
committed
make the change in the grouper
1 parent 16cb5f0 commit 08643fc

File tree

3 files changed

+8
-12
lines changed

3 files changed

+8
-12
lines changed

pandas/core/groupby/ops.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -299,9 +299,13 @@ def reconstructed_codes(self) -> List[np.ndarray]:
299299
def result_index(self) -> Index:
300300
if not self.compressed and len(self.groupings) == 1:
301301
return self.groupings[0].result_index.rename(self.names[0])
302-
303302
codes = self.reconstructed_codes
304-
levels = [ping.result_index for ping in self.groupings]
303+
levels = [
304+
ping.result_index
305+
if ping.result_index.is_monotonic
306+
else algorithms.factorize(ping.result_index, sort=True)[0]
307+
for ping in self.groupings
308+
]
305309
result = MultiIndex(
306310
levels=levels, codes=codes, verify_integrity=False, names=self.names
307311
)

pandas/core/indexes/multi.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -1644,13 +1644,7 @@ def _lexsort_depth(self) -> int:
16441644
-------
16451645
int
16461646
"""
1647-
if all(x.is_monotonic for x in self.levels):
1648-
# If each level is sorted, we can operate on the codes directly. GH27495
1649-
int64_codes = [ensure_int64(level_codes) for level_codes in self.codes]
1650-
else:
1651-
int64_codes = [
1652-
ensure_int64(algos.factorize(self.get_level_values(i), sort=True)[0]) for i in range(self.nlevels)
1653-
]
1647+
int64_codes = [ensure_int64(level_codes) for level_codes in self.codes]
16541648
for k in range(self.nlevels, 0, -1):
16551649
if libalgos.is_lexsorted(int64_codes[:k]):
16561650
return k

pandas/tests/test_multilevel.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -1100,15 +1100,14 @@ def aggf(x):
11001100
return getattr(x, op)(skipna=skipna, axis=axis)
11011101

11021102
leftside = grouped.agg(aggf)
1103-
breakpoint()
11041103
rightside = getattr(frame, op)(level=level, axis=axis, skipna=skipna)
11051104
if sort:
11061105
rightside = rightside.sort_index(level=level, axis=axis)
11071106
frame = frame.sort_index(level=level, axis=axis)
11081107

11091108
# for good measure, groupby detail
11101109
level_index = frame._get_axis(axis).levels[level].rename(level_name)
1111-
breakpoint()
1110+
11121111
tm.assert_index_equal(leftside._get_axis(axis), level_index)
11131112
tm.assert_index_equal(rightside._get_axis(axis), level_index)
11141113

@@ -2415,7 +2414,6 @@ def test_sort_non_lexsorted(self):
24152414
)
24162415

24172416
df = DataFrame({"col": range(len(idx))}, index=idx, dtype="int64")
2418-
breakpoint()
24192417
assert df.index.is_lexsorted() is False
24202418
assert df.index.is_monotonic is False
24212419

0 commit comments

Comments
 (0)