Skip to content

Commit ed98629

Browse files
committed
Merge pull request #11546 from varun-kr/fix-describe-column-names
BUG: GH11517 add multiindex column names after describe()
2 parents 764c619 + 1c66021 commit ed98629

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

doc/source/whatsnew/v0.17.1.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ Bug Fixes
9595
- Bug in ``pd.eval`` where unary ops in a list error (:issue:`11235`)
9696
- Bug in ``squeeze()`` with zero length arrays (:issue:`11230`, :issue:`8999`)
9797

98+
- Bug in ``describe()`` dropping column names for hierarchical indexes (:issue:`11517`)
99+
98100

99101

100102

pandas/core/generic.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4516,6 +4516,7 @@ def describe_1d(data, percentiles):
45164516
if name not in names:
45174517
names.append(name)
45184518
d = pd.concat(ldesc, join_axes=pd.Index([names]), axis=1)
4519+
d.columns.names = data.columns.names
45194520
return d
45204521

45214522
def _check_percentile(self, q):

pandas/tests/test_generic.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,6 +1471,25 @@ def test_describe_typefiltering_groupby(self):
14711471
self.assertTrue(G.describe(include=['number', 'object']).shape == (22, 3))
14721472
self.assertTrue(G.describe(include='all').shape == (26, 4))
14731473

1474+
def test_describe_multi_index_df_column_names(self):
1475+
""" Test that column names persist after the describe operation."""
1476+
1477+
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
1478+
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
1479+
'C': np.random.randn(8),
1480+
'D': np.random.randn(8)})
1481+
1482+
# GH 11517
1483+
# test for hierarchical index
1484+
hierarchical_index_df = df.groupby(['A', 'B']).mean().T
1485+
self.assertTrue(hierarchical_index_df.columns.names == ['A', 'B'])
1486+
self.assertTrue(hierarchical_index_df.describe().columns.names == ['A', 'B'])
1487+
1488+
# test for non-hierarchical index
1489+
non_hierarchical_index_df = df.groupby(['A']).mean().T
1490+
self.assertTrue(non_hierarchical_index_df.columns.names == ['A'])
1491+
self.assertTrue(non_hierarchical_index_df.describe().columns.names == ['A'])
1492+
14741493
def test_no_order(self):
14751494
tm._skip_if_no_scipy()
14761495
s = Series([0, 1, np.nan, 3])

0 commit comments

Comments
 (0)