如何对多索引时间序列数据进行分组?
how to groupby a Multi Index time series data?
假设我生成如下 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
现在如何按 number
分组?
我试着分组如下。
testdf.groupby('number')
抛出以下错误。
KeyError: 'number'
使用 groupby
和参数 axis=1
按列分组,定义级别,然后添加聚合函数,如 sum
、mean
:
df = testdf.groupby(axis=1, level=1).sum()
或者:
df = testdf.groupby(axis=1, level='number').sum()
假设我生成如下 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
现在如何按 number
分组?
我试着分组如下。
testdf.groupby('number')
抛出以下错误。
KeyError: 'number'
使用 groupby
和参数 axis=1
按列分组,定义级别,然后添加聚合函数,如 sum
、mean
:
df = testdf.groupby(axis=1, level=1).sum()
或者:
df = testdf.groupby(axis=1, level='number').sum()