[英]Multiindex on DataFrames and sum in Pandas
我目前正在尝试使用Pandas MultiIndex属性。 我试图以一种聪明的方式基于其列对现有的DataFrame-对象df_original
进行分组,因此正在考虑MultiIndex。
print df_original =
by_currency by_portfolio A B C
1 AUD a 1 2 3
2 AUD b 4 5 6
3 AUD c 7 8 9
4 AUD d 10 11 12
5 CHF a 13 14 15
6 CHF b 16 17 18
7 CHF c 19 20 21
8 CHF d 22 23 24
现在,我想拥有一个MultiIndex DataFrame对象, A, B
对象具有A, B
和C
,并且by_portfolio
作为索引。 看起来像
CHF AUD
A a 13 1
b 16 4
c 19 7
d 22 10
B a 14 2
b 17 5
c 20 8
d 23 11
C a 15 3
b 18 6
c 21 9
d 24 12
我尝试过将df_original
所有列和所需的索引都放入列表对象中,然后从那里创建一个新的DataFrame。 这似乎有点麻烦,我无法弄清楚之后如何添加实际值。
也许某种方式的groupby
对此更好? 问题是,我需要能够将此数据添加到另一个类似的DataFrame中,因此我需要将生成的DataFrame以后可以添加到另一个DataFrame中。
谢谢
您可以结合使用stack
和unstack
:
In [50]: df.set_index(['by_currency', 'by_portfolio']).stack().unstack(0)
Out[50]:
by_currency AUD CHF
by_portfolio
a A 1 13
B 2 14
C 3 15
b A 4 16
B 5 17
C 6 18
c A 7 19
B 8 20
C 9 21
d A 10 22
B 11 23
C 12 24
为了获得您想要的结果,我们只需要交换索引级别:
In [51]: df2 = df.set_index(['by_currency', 'by_portfolio']).stack().unstack(0)
In [52]: df2.columns.name = None
In [53]: df2.index = df2.index.swaplevel(0,1)
In [55]: df2 = df2.sort_index()
In [56]: df2
Out[56]:
AUD CHF
by_portfolio
A a 1 13
b 4 16
c 7 19
d 10 22
B a 2 14
b 5 17
c 8 20
d 11 23
C a 3 15
b 6 18
c 9 21
d 12 24
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.