python - 如何在分组数据中找到上面每一行的总和?
问题描述
我有一个df
AccountID PurchaseDate Price
| 113 2018-09-01 22:56:30 13|
| 114 2018-09-03 22:57:30 23|
| 113 2018-09-02 22:56:30 19|
| 114 2018-09-01 22:56:30 20|
| 114 2018-09-03 22:56:30 25|
我AccountID
已经在groupby()
如何创建一个新列TotalPurchase
,其中包含Price
但仅针对该行的相同AccountID
和PurchaseDate
前一天的总和?
AccountID PurchaseDate Price TotalPurchase
| 113 2018-09-01 22:56:30 13 0 |
| 113 2018-09-02 22:56:30 19 13 |
| 114 2018-09-01 22:56:30 20 0 |
| 114 2018-09-03 22:56:30 25 20 |
| 114 2018-09-03 22:57:30 23 45 |
解决方案
shift()
使用and尝试以下操作cumsum()
:
df = df.sort_values(by=['AccountID', 'PurchaseDate'])
df['TotalPurchase'] = df.groupby('AccountID')['Price'].transform(lambda x: x.shift().cumsum()).fillna(0)
输出:
AccountID PurchaseDate Price TotalPurchase
0 113 2018-09-01 22:56:30 13 0.0
2 113 2018-09-02 22:56:30 19 13.0
3 114 2018-09-01 22:56:30 20 0.0
4 114 2018-09-03 22:56:30 25 20.0
1 114 2018-09-03 22:57:30 23 45.0
推荐阅读
- android - 能够在 Windows 10 上使用 USB 调试/文件传输查看 Android 手机的根文件
- ubuntu - 为什么我不能使用创建的 phpmyadmin 用户在 phpmyadmin 中添加新数据库?
- python-3.x - 有没有办法在后台捕获数据包并使用 scapy 发送数据包?
- java - 如何正确使用 Postman 测试应用程序?
- reactjs - 反应钩子形式和反应数字格式的isDirty问题
- spring - 在 Java Spring 中测试 SOAP 消息
- spring-boot - JDBC template.queryForList() 不适用于preparestatement
- node.js - node_modules/graphql-tag/lib/index.d.ts(2,57) 中的 Angular 7 错误:错误 TS1005:“,”预期
- centos - skia/buildtools/linux64/gn: /lib64/libc.so.6: 找不到版本‘GLIBC_2.18’
- aws-lambda - 如何使用 Api Gateway 可视化 Step Function 的输出?