-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
BUG: Fix error for boxplot
when using a pre-grouped DataFrame
with more than one grouping
#57985
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
81607c3
6a346dd
3c741ea
e9811fc
6f084e1
a326529
50c0e38
dacaf2d
e3124c0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -540,7 +540,9 @@ def boxplot_frame_groupby( | |
ax=ax, column=column, fontsize=fontsize, rot=rot, grid=grid, **kwds | ||
) | ||
ax.set_title(pprint_thing(key)) | ||
ret.loc[key] = d | ||
# GH 14701 'key' needs to be converted to text as 'key' is a tuple when | ||
# there is more than one group | ||
ret.loc[pprint_thing(key)] = d | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Instead of
In general one should not construct a Series row-by-row (this is very slow), but rather provide all the data upfront. I think this will also allow tuples for key. |
||
maybe_adjust_figure(fig, bottom=0.15, top=0.9, left=0.1, right=0.9, wspace=0.2) | ||
else: | ||
keys, frames = zip(*grouped) | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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))) | ||
pregrouped = df.groupby(group) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nit: Just to adhere to existing conventions in tests, could you either call this |
||
_check_plot_works(df.boxplot, by=group, default_axes=True) | ||
_check_plot_works(df.plot.box, by=group, default_axes=True) | ||
_check_plot_works(pregrouped.boxplot, default_axes=True) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The link to the API docs won't resolve unless you include a
.
beforeDataFrameGroupBy
; so it should be:meth:`.DataFrameGroupBy.boxplot`