Skip to content

ensure consistent structure for groupby on index and column #29357

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

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions pandas/tests/groupby/test_grouping.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
date_range,
)
from pandas.core.groupby.grouper import Grouping
from pandas.core.indexes.frozen import FrozenList
import pandas.util.testing as tm

# selection
Expand Down Expand Up @@ -641,6 +642,27 @@ def test_groupby_level_index_value_all_na(self):
)
tm.assert_frame_equal(result, expected)

@pytest.mark.parametrize(
"df",
[
pd.DataFrame([[1, 2, 3]], columns=["a", "b", "c"]).set_index("a"),
pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=["a", "b", "c"]).set_index(
"a"
),
pd.DataFrame(
[[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["a", "b", "c"]
).set_index("a"),
],
)
@pytest.mark.parametrize(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you use the fixture all_numeric_reductions (you can simply replace method with this)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've just checked, if I remove the second pytest parametrisation and use all_numeric_reductions (from pandas.conftest) as the second parameter the test will throw an error of AttributeError: 'DataFrameGroupBy' object has no attribute 'kurt'.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think can also use reduction_func from the groupby contest. Might need to consolidate those fixtures at a later point

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that case tests fail for ngroup and nth reductions: AssertionError: assert FrozenList(['a']) == FrozenList(['a', 'c']) and TypeError: nth() missing 1 required positional argument: 'n' respectively.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the test in #29124 is already doing this with all of the groupby funcs though with a different intent (duplicate column labels). Maybe after that gets merged we come back to this and see if this makes sense to fit into that test as well via some sort of parametrization; not sure it's worth doing as a one-off

"method", ["mean", "median", "prod", "min", "max", "sum", "std", "var"]
)
def test_groupby_on_index_and_column_consistent_structure(self, df, method):
# https://github.com/pandas-dev/pandas/issues/17681
df_gb = df.groupby(["a", "c"])
result = getattr(df_gb, method)()
assert result.index.names == FrozenList(["a", "c"])


# get_group
# --------------------------------
Expand Down