首页 > 解决方案 > 熊猫计算每一行与前行的总和

问题描述

或如何计算每次预订的账户余额。

我为账户上的每笔交易都有一个数据框,其中交易金额只是列中的正数或负数。另外我有经常账户余额。

我想要做的是在balance我的数据框中添加一列,在每次预订后存储当前余额。

                            amount
bookingDate                        
2016-10-25 00:00:00+00:00   8424.09
2016-10-26 00:00:00+00:00  -3264.72
2016-10-27 00:00:00+00:00    -27.50
2016-10-28 00:00:00+00:00   -611.85
2016-10-31 00:00:00+00:00   -248.40
2016-11-01 00:00:00+00:00   323.37

假设2016-10-25(+8424.09 之后)的余额是这样的5000,所以我期望类似:

                            amount     balance
bookingDate    
2016-10-25 00:00:00+00:00   8424.09    5000
2016-10-26 00:00:00+00:00  -3264.72    1735.28
2016-10-27 00:00:00+00:00    -27.50    1707.78
2016-10-28 00:00:00+00:00   -611.85    1095.93
2016-10-31 00:00:00+00:00   -248.40     847.53
2016-11-01 00:00:00+00:00    323.37    1170.90

在熊猫中这样做的最佳方法是什么?如何考虑账户余额的可变起始金额?

标签: pythonpandas

解决方案


您需要设置balanceamount除起始余额之外的列,然后执行cumsum()

一个班轮

df['balance'] = pd.Series([5000], index=[0]).append(df['amount'][1:]).cumsum()

更长且易于理解的版本

df['balance'] = df['amount']
df.loc[0, 'balance'] = 5000
df['balance'] = df['balance'].cumsum()

输出:

                 bookingDate   amount  balance
0  2016-10-25 00:00:00+00:00  8424.09  5000.00
1  2016-10-26 00:00:00+00:00 -3264.72  1735.28
2  2016-10-27 00:00:00+00:00   -27.50  1707.78
3  2016-10-28 00:00:00+00:00  -611.85  1095.93
4  2016-10-31 00:00:00+00:00  -248.40   847.53
5  2016-11-01 00:00:00+00:00  -323.37   524.16

推荐阅读