Python Pandas: 多级索引分组,按第二列进行分组

4

我想按多列对行进行分组。为了说明这一点,可以看下面的小例子:

import pandas as pd

col_index = pd.MultiIndex.from_arrays([['A','A','B','B'],['a','b','c','d']])

df = pd.DataFrame([ [1,2,3,3],
                    [4,2,2,2],
                    [6,4,2,2],
                    [1,2,4,4],
                    [3,8,4,4],
                    [1,2,3,3]], columns = col_index)

由此创建的DataFrame如下所示:

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

我想按照'c'和'd',实际上是整个'B'进行分组。 这会导致 "KeyError: 'c'" 的错误。
#something like this
df.groupby(['c','d'], axis = 1, level = 1)
#or like this
df.groupby('B', axis = 1, level = 0)

我尝试搜索答案,但似乎找不到任何结果。

有人可以告诉我我做错了什么吗?

2个回答

1
这是一种通过先重置列来完成的方法:
df.set_axis(df.columns.droplevel(0), axis=1,inplace=False).groupby(['c','d']).sum()
Out[531]: 
      a   b
c d        
2 2  10   6
3 3   2   4
4 4   4  10

0

您还可以明确指定二级多索引。

df.groupby([("B","c"), ("B", "d")])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接