或如何计算每次预订的帐户余额。
我为帐户中的每笔交易都有一个数据框,其中交易金额只是该列中的正数或负数。另外,我有当前的帐户余额。
我想做的是在数据框中添加一个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
在大熊猫中这样做的最佳方法是什么?如何考虑帐户余额的起始金额不定?
答案 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()
的工作。