将行值设为列并为DataFrame求和

时间:2014-10-16 11:08:02

标签: python pandas

也许这很容易,但我无法自己解决这个问题。

我有以下DataFrame:

    Date            Currency    Amount
0   2014-10-17      EUR         -20000000
1   2014-10-17      EUR         -80000000
2   2014-10-17      USD         -20000000
3   2014-10-18      JPY         -20000000
4   2014-10-19      USD         -10000000
5   2014-10-19      USD         -20000000
6   2014-10-20      JPY         -20000000
7   2014-10-20      JPY         -20000000

并希望将货币代码设置为列名,同时将每天的所有金额相加,因此结果如下:

    Date            EUR          USD          JPY
0   2014-10-17     -100000000   -20000000     0.0
1   2014-10-18      0.0          0.0         -20000000
2   2014-10-19      0.0         -30000000     0.0
3   2014-10-20      0.0          0.0         -40000000

任何线索?

1 个答案:

答案 0 :(得分:4)

使用.pivot_table

>>> df.pivot_table(index='Date', columns='Currency',
...                values='Amount', aggfunc='sum', fill_value=0)
Currency          EUR       JPY       USD
Date                                     
2014-10-17 -100000000         0 -20000000
2014-10-18          0 -20000000         0
2014-10-19          0         0 -30000000
2014-10-20          0 -40000000         0

或,.groupby后跟.unstack,后跟.fillna

>>> df.groupby(['Date', 'Currency'])['Amount'].agg('sum').unstack().fillna(0)
Currency          EUR       JPY       USD
Date                                     
2014-10-17 -100000000         0 -20000000
2014-10-18          0 -20000000         0
2014-10-19          0         0 -30000000
2014-10-20          0 -40000000         0