Skip to content

Commit 0484244

Browse files
committed
handle dropna=False in _selected_obj, _set_result_index_ordered
1 parent a3f5c6a commit 0484244

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

pandas/core/groupby/generic.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1677,12 +1677,17 @@ def _gotitem(self, key, ndim: int, subset=None):
16771677
exclusions=self.exclusions,
16781678
as_index=self.as_index,
16791679
observed=self.observed,
1680+
dropna=self.dropna,
16801681
)
16811682
elif ndim == 1:
16821683
if subset is None:
16831684
subset = self.obj[key]
16841685
return SeriesGroupBy(
1685-
subset, selection=key, grouper=self.grouper, observed=self.observed
1686+
subset,
1687+
selection=key,
1688+
grouper=self.grouper,
1689+
observed=self.observed,
1690+
dropna=self.dropna,
16861691
)
16871692

16881693
raise AssertionError("invalid ndim for _gotitem")

pandas/core/groupby/groupby.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -637,10 +637,12 @@ def _selected_obj(self):
637637

638638
if self._selection is None or isinstance(self.obj, Series):
639639
if self._group_selection is not None:
640-
return self.obj[self._group_selection]
641-
return self.obj
640+
result = self.obj[self._group_selection]
641+
result = self.obj
642642
else:
643-
return self.obj[self._selection]
643+
result = self.obj[self._selection]
644+
645+
return result.dropna() if self.dropna else result
644646

645647
def _reset_group_selection(self):
646648
"""
@@ -690,7 +692,12 @@ def _set_result_index_ordered(self, result):
690692
result.set_axis(index, axis=self.axis, inplace=True)
691693
result = result.sort_index(axis=self.axis)
692694

693-
result.set_axis(self.obj._get_axis(self.axis), axis=self.axis, inplace=True)
695+
if hasattr(self, "_selected_obj"):
696+
labels = self._selected_obj._get_axis(self.axis)
697+
else:
698+
labels = self.obj._get_axis(self.axis)
699+
700+
result.set_axis(labels, axis=self.axis, inplace=True)
694701
return result
695702

696703
def _dir_additions(self):

pandas/tests/groupby/test_groupby_dropna.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,7 @@ def test_groupby_dropna_series_by(dropna, expected):
165165
@pytest.mark.parametrize(
166166
"dropna,df_expected,s_expected",
167167
[
168-
pytest.param(
169-
True,
170-
pd.DataFrame({"B": [2, 2, 1]}),
171-
pd.Series(data=[2, 2, 1], name="B"),
172-
marks=pytest.mark.xfail(raises=ValueError),
173-
),
168+
(True, pd.DataFrame({"B": [2, 2, 1]}), pd.Series(data=[2, 2, 1], name="B"),),
174169
(
175170
False,
176171
pd.DataFrame({"B": [2, 2, 1, 1]}),
@@ -179,7 +174,7 @@ def test_groupby_dropna_series_by(dropna, expected):
179174
],
180175
)
181176
def test_slice_groupby_then_transform(dropna, df_expected, s_expected):
182-
# GH35014
177+
# GH35014 & GH35612
183178

184179
df = pd.DataFrame({"A": [0, 0, 1, None], "B": [1, 2, 3, None]})
185180
gb = df.groupby("A", dropna=dropna)

0 commit comments

Comments
 (0)