python - 熊猫计算每一行与前行的总和
问题描述
或如何计算每次预订的账户余额。
我为账户上的每笔交易都有一个数据框,其中交易金额只是列中的正数或负数。另外我有经常账户余额。
我想要做的是在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
在熊猫中这样做的最佳方法是什么?如何考虑账户余额的可变起始金额?
解决方案
您需要设置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
推荐阅读
- nix - 我将我的 nixos 频道更改为不稳定,为什么我的包仍然没有更新?
- php - 当添加新帖子时,laravel 5.6 向 10,000 多个订阅者发送邮件
- c# - 为什么要使用覆盖?
- sql-server - SQL Server 内存中 OLTP (Hekaton) 中的动态更新或等效脚本
- node.js - Angular 6+,能够从应用程序安全地创建用户
- ansible - 来自打包脚本的 Ansible 变量
- php - PHP 从 JSON 数组中获取值
- kubernetes - Rancher v2.0 提议 openebs 部署使用 v0.6.0 helm 模板
- javascript - 我的程序无法正常运行,当我单击“添加播放器”按钮时,没有文档添加到 mongo
- intellij-idea - intelliJ 将 Bootstrap 类显示为拼写错误