Skip to content

Commit 098a09a

Browse files
committed
Merge pull request pandas-dev#9461 from cottrell/groupby_sort
Fix bug in multiindex series groupby where sort argument is ignored
2 parents 0efd4b3 + 1bcfe35 commit 098a09a

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

doc/source/whatsnew/v0.16.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -268,3 +268,4 @@ Bug Fixes
268268

269269
- Bug in ``read_csv`` with buffer overflows with certain malformed input files (:issue:`9205`)
270270
- Bug in groupby MultiIndex with missing pair (:issue:`9049`, :issue:`9344`)
271+
- Fixed bug in ``Series.groupby`` where grouping on ``MultiIndex`` levels would ignore the sort argument (:issue:`9444`)

pandas/core/groupby.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1368,7 +1368,7 @@ def _get_compressed_labels(self):
13681368
if len(all_labels) > 1:
13691369
group_index = get_group_index(all_labels, self.shape,
13701370
sort=True, xnull=True)
1371-
return _compress_group_index(group_index)
1371+
return _compress_group_index(group_index, sort=self.sort)
13721372

13731373
ping = self.groupings[0]
13741374
return ping.labels, np.arange(len(ping.group_index))

pandas/tests/test_groupby.py

+17
Original file line numberDiff line numberDiff line change
@@ -3270,6 +3270,23 @@ def test_no_dummy_key_names(self):
32703270
self.df['B'].values]).sum()
32713271
self.assertEqual(result.index.names, (None, None))
32723272

3273+
def test_groupby_sort_multiindex_series(self):
3274+
# series multiindex groupby sort argument was not being passed through _compress_group_index
3275+
# GH 9444
3276+
index = MultiIndex(levels=[[1, 2], [1, 2]],
3277+
labels=[[0, 0, 0, 0, 1, 1], [1, 1, 0, 0, 0, 0]],
3278+
names=['a', 'b'])
3279+
mseries = Series([0, 1, 2, 3, 4, 5], index=index)
3280+
index = MultiIndex(levels=[[1, 2], [1, 2]],
3281+
labels=[[0, 0, 1], [1, 0, 0]],
3282+
names=['a', 'b'])
3283+
mseries_result = Series([0, 2, 4], index=index)
3284+
3285+
result = mseries.groupby(level=['a', 'b'], sort=False).first()
3286+
assert_series_equal(result, mseries_result)
3287+
result = mseries.groupby(level=['a', 'b'], sort=True).first()
3288+
assert_series_equal(result, mseries_result.sort_index())
3289+
32733290
def test_groupby_categorical(self):
32743291
levels = ['foo', 'bar', 'baz', 'qux']
32753292
codes = np.random.randint(0, 4, size=100)

0 commit comments

Comments
 (0)