Skip to content

Commit 1fa1ad9

Browse files
charlesdong1991jreback
authored andcommitted
BUG: grouby(axis=1) cannot select column names (#27700)
1 parent 2de4fbb commit 1fa1ad9

File tree

3 files changed

+25
-2
lines changed

3 files changed

+25
-2
lines changed

doc/source/whatsnew/v1.0.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ Groupby/resample/rolling
170170

171171
-
172172
-
173+
- Bug in :meth:`DataFrame.groupby` not offering selection by column name when ``axis=1`` (:issue:`27614`)
173174

174175
Reshaping
175176
^^^^^^^^^

pandas/core/groupby/grouper.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -606,10 +606,10 @@ def is_in_obj(gpr):
606606
elif is_in_axis(gpr): # df.groupby('name')
607607
if gpr in obj:
608608
if validate:
609-
obj._check_label_or_level_ambiguity(gpr)
609+
obj._check_label_or_level_ambiguity(gpr, axis=axis)
610610
in_axis, name, gpr = True, gpr, obj[gpr]
611611
exclusions.append(name)
612-
elif obj._is_level_reference(gpr):
612+
elif obj._is_level_reference(gpr, axis=axis):
613613
in_axis, name, level, gpr = False, None, gpr, None
614614
else:
615615
raise KeyError(gpr)

pandas/tests/groupby/test_groupby.py

+22
Original file line numberDiff line numberDiff line change
@@ -1860,3 +1860,25 @@ def test_groupby_groups_in_BaseGrouper():
18601860
result = df.groupby(["beta", pd.Grouper(level="alpha")])
18611861
expected = df.groupby(["beta", "alpha"])
18621862
assert result.groups == expected.groups
1863+
1864+
1865+
@pytest.mark.parametrize("group_name", ["x", ["x"]])
1866+
def test_groupby_axis_1(group_name):
1867+
# GH 27614
1868+
df = pd.DataFrame(
1869+
np.arange(12).reshape(3, 4), index=[0, 1, 0], columns=[10, 20, 10, 20]
1870+
)
1871+
df.index.name = "y"
1872+
df.columns.name = "x"
1873+
1874+
results = df.groupby(group_name, axis=1).sum()
1875+
expected = df.T.groupby(group_name).sum().T
1876+
assert_frame_equal(results, expected)
1877+
1878+
# test on MI column
1879+
iterables = [["bar", "baz", "foo"], ["one", "two"]]
1880+
mi = pd.MultiIndex.from_product(iterables=iterables, names=["x", "x1"])
1881+
df = pd.DataFrame(np.arange(18).reshape(3, 6), index=[0, 1, 0], columns=mi)
1882+
results = df.groupby(group_name, axis=1).sum()
1883+
expected = df.T.groupby(group_name).sum().T
1884+
assert_frame_equal(results, expected)

0 commit comments

Comments
 (0)