在大熊猫中进行groupby后如何访问MultiIndex列?

pol*_*lot 6 python grouping multi-index pandas pandas-groupby

对于单索引数据框,这些列在按对象分组中可用:

df1 = pd.DataFrame({'a':[2,2,4,4], 'b': [5,6,7,8]})
df1.groupby('a')['b'].sum() -> 

a
2    11
4    15
Run Code Online (Sandbox Code Playgroud)

但是在MultiIndex数据框中,如果不按级别分组,则无法再按对象分组访问列

df = pd.concat([df1, df1], keys=['c', 'd'], axis=1)
df -> 

   c     d
   a  b  a  b
0  2  5  2  5
1  2  6  2  6
2  4  7  4  7
3  4  8  4  8

df.groupby([('c','a')])[('c','b')].sum() -> 
KeyError: "Columns not found: 'b', 'c'"
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,此方法有效,但效率不高,因为它不使用cpythonized聚合器,更不用说它看上去很尴尬。

df.groupby([('c','a')]).apply(lambda df: df[('c', 'b')].sum())
Run Code Online (Sandbox Code Playgroud)

有没有办法访问我错过的groupby对象中的MultiIndex列?

roo*_*oot 5

在您的('c','b')元组后添加逗号似乎可行:

df.groupby([('c','a')])[('c','b'),].sum()
Run Code Online (Sandbox Code Playgroud)

我猜想熊猫没有逗号,只是将它们解释为单独的项目。