Pandas 如何按多索引时间序列数据分组?

Pandas 如何按多索引时间序列数据分组?,pandas,pandas-groupby,Pandas,Pandas Groupby,假设我生成一个df,如下所示 testdf = pd.DataFrame(np.random.randn(4,4),index= pd.date_range("20170101",periods=4),columns =list("ABCD")) testdf Out[40]: A B C D 2017-01-01 0.084624 -0.371352 -1.013843 -1.102199 2017-0

假设我生成一个df,如下所示

testdf = pd.DataFrame(np.random.randn(4,4),index= pd.date_range("20170101",periods=4),columns =list("ABCD"))

testdf
Out[40]: 
                   A         B         C         D
2017-01-01  0.084624 -0.371352 -1.013843 -1.102199
2017-01-02  0.390855 -0.519623  0.241092 -1.474969
2017-01-03  0.129163 -0.183547 -1.333859 -0.864320
2017-01-04  1.265360 -0.260505  0.633058 -0.077758
index = pd.MultiIndex.from_arrays([list("ABCD"),("one","one","two","two")],names=['letter','number'])

testdf.columns = index

testdf
Out[44]: 
letter             A         B         C         D
number           one       one       two       two
2017-01-01  0.084624 -0.371352 -1.013843 -1.102199
2017-01-02  0.390855 -0.519623  0.241092 -1.474969
2017-01-03  0.129163 -0.183547 -1.333859 -0.864320
2017-01-04  1.265360 -0.260505  0.633058 -0.077758
然后我创建一个mulit索引,如下所示

testdf = pd.DataFrame(np.random.randn(4,4),index= pd.date_range("20170101",periods=4),columns =list("ABCD"))

testdf
Out[40]: 
                   A         B         C         D
2017-01-01  0.084624 -0.371352 -1.013843 -1.102199
2017-01-02  0.390855 -0.519623  0.241092 -1.474969
2017-01-03  0.129163 -0.183547 -1.333859 -0.864320
2017-01-04  1.265360 -0.260505  0.633058 -0.077758
index = pd.MultiIndex.from_arrays([list("ABCD"),("one","one","two","two")],names=['letter','number'])

testdf.columns = index

testdf
Out[44]: 
letter             A         B         C         D
number           one       one       two       two
2017-01-01  0.084624 -0.371352 -1.013843 -1.102199
2017-01-02  0.390855 -0.519623  0.241092 -1.474969
2017-01-03  0.129163 -0.183547 -1.333859 -0.864320
2017-01-04  1.265360 -0.260505  0.633058 -0.077758
现在我如何按编号分组

我试着按以下方式分组

testdf.groupby('number')
这将抛出下面的错误

KeyError: 'number'
将参数
axis=1
用于分组方式列,定义级别,然后添加聚合函数,如
sum
mean

df = testdf.groupby(axis=1, level=1).sum()
或: