Skip to content

Commit 6c75e05

Browse files
committed
EHN: Groupby on multiindex with missing data in group keys raises
IndexError (pandas-dev#20519) * if all the values in a level of a MultiIndex were missing, fill with numpy nan
1 parent def01cf commit 6c75e05

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

doc/source/whatsnew/v1.0.0.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ Groupby/resample/rolling
174174
^^^^^^^^^^^^^^^^^^^^^^^^
175175

176176
-
177-
-
177+
- ``IndexError`` would not raise if all the values in a level of a MultiIndex were missing (:issue:`20519`)
178+
- Bug in :meth:`DataFrame.rolling` not allowing for rolling over datetimes when ``axis=1`` (:issue: `28192`)
178179
- Bug in :meth:`DataFrame.groupby` not offering selection by column name when ``axis=1`` (:issue:`27614`)
179180

180181
Reshaping

pandas/tests/groupby/test_grouping.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,49 @@ def test_groupby_empty(self):
628628
# check name
629629
assert s.groupby(s).grouper.names == ["name"]
630630

631+
def test_groupby_level_index_value_all_na(self):
632+
# issue 20519
633+
df = pd.DataFrame([["x", np.nan, 10]], columns=["A", "B", "C"]).set_index(
634+
["A", "B"]
635+
)
636+
result = df.groupby(level=["A", "B"]).sum()
637+
expected = DataFrame(
638+
data=[],
639+
index=MultiIndex(
640+
levels=[
641+
Index(["x"], dtype="object", name="A"),
642+
Index([], dtype='float64', name="B")
643+
],
644+
codes=[[], []]
645+
),
646+
columns=["C"],
647+
dtype='int64'
648+
)
649+
tm.assert_frame_equal(
650+
result,
651+
expected
652+
)
653+
654+
df = pd.DataFrame(
655+
[[None, None, "x", 10], [None, "y", None, 20]],
656+
columns=["A", "B", "C", "D"]
657+
).set_index(["A", "B", "C"])
658+
result = df.groupby(level=["A", "B", "C"]).sum()
659+
expected = DataFrame(
660+
data=[],
661+
index=MultiIndex(
662+
levels=[[], ["y"], ["x"]],
663+
codes=[[], [], []],
664+
names=["A", "B", "C"]
665+
),
666+
columns=["D"],
667+
dtype='int64'
668+
)
669+
tm.assert_frame_equal(
670+
result,
671+
expected
672+
)
673+
631674

632675
# get_group
633676
# --------------------------------

0 commit comments

Comments
 (0)