熊猫计算每行与前一行的和

时间:2018-07-19 13:32:18

标签: python pandas

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

我为帐户中的每笔交易都有一个数据框,其中交易金额只是该列中的正数或负数。另外,我有当前的帐户余额。

我想做的是在数据框中添加一个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

在大熊猫中这样做的最佳方法是什么?如何考虑帐户余额的起始金额不定?

3 个答案:

答案 0 :(得分:3)

您可以使用pd.Series.cumsum,添加初始余额并扣除初始金额:

df['Balance'] = df['amount'].cumsum() + 5e3 - df['amount'].iloc[0]

print(df)

              amount  Balance
bookingDate                  
2016-10-25   8424.09  5000.00
2016-10-26  -3264.72  1735.28
2016-10-27    -27.50  1707.78
2016-10-28   -611.85  1095.93
2016-10-31   -248.40   847.53
2016-11-01   -323.37   524.16

答案 1 :(得分:2)

除了起始余额外,您需要将balance设置为amount列,然后执行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

答案 2 :(得分:0)

听起来像DataFrame.cumsum()的工作。