Skip to content

Commit

Permalink
BUG: Fix error for boxplot when using a pre-grouped DataFrame wit…
Browse files Browse the repository at this point in the history
…h more than one grouping (#57985)
  • Loading branch information
thetestspecimen authored Mar 31, 2024
1 parent 4241ba5 commit 73fd026
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 4 deletions.
2 changes: 1 addition & 1 deletion doc/source/whatsnew/v3.0.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ Period

Plotting
^^^^^^^^
-
- Bug in :meth:`.DataFrameGroupBy.boxplot` failed when there were multiple groupings (:issue:`14701`)
-

Groupby/resample/rolling
Expand Down
6 changes: 3 additions & 3 deletions pandas/plotting/_matplotlib/boxplot.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,14 +533,14 @@ def boxplot_frame_groupby(
)
axes = flatten_axes(axes)

ret = pd.Series(dtype=object)

data = {}
for (key, group), ax in zip(grouped, axes):
d = group.boxplot(
ax=ax, column=column, fontsize=fontsize, rot=rot, grid=grid, **kwds
)
ax.set_title(pprint_thing(key))
ret.loc[key] = d
data[key] = d
ret = pd.Series(data)
maybe_adjust_figure(fig, bottom=0.15, top=0.9, left=0.1, right=0.9, wspace=0.2)
else:
keys, frames = zip(*grouped)
Expand Down
14 changes: 14 additions & 0 deletions pandas/tests/plotting/test_boxplot_method.py
Original file line number Diff line number Diff line change
Expand Up @@ -740,3 +740,17 @@ def test_boxplot_multiindex_column(self):
expected_xticklabel = ["(bar, one)", "(bar, two)"]
result_xticklabel = [x.get_text() for x in axes.get_xticklabels()]
assert expected_xticklabel == result_xticklabel

@pytest.mark.parametrize("group", ["X", ["X", "Y"]])
def test_boxplot_multi_groupby_groups(self, group):
# GH 14701
rows = 20
df = DataFrame(
np.random.default_rng(12).normal(size=(rows, 2)), columns=["Col1", "Col2"]
)
df["X"] = Series(np.repeat(["A", "B"], int(rows / 2)))
df["Y"] = Series(np.tile(["C", "D"], int(rows / 2)))
grouped = df.groupby(group)
_check_plot_works(df.boxplot, by=group, default_axes=True)
_check_plot_works(df.plot.box, by=group, default_axes=True)
_check_plot_works(grouped.boxplot, default_axes=True)

0 comments on commit 73fd026

Please sign in to comment.