python - 使用 Python 跟踪累积值
问题描述
我想跨列执行特定计算: pwr - base + final 创建一个“使用”列。但是,这必须按 id 和日期分组。一旦建立了第一个计算,第二个计算将是新创建的已用列的累积。这将是:每个日期行的使用列+最终。
数据
pwr pos id date base position final
100 40 aa q121 50 20 15
100 40 aa q221 50 20 25
100 40 aa q321 50 20 10
100 40 aa q421 50 20 5
50 30 bb q121 25 10 0
50 30 bb q221 25 10 10
期望的
pwr pos id date base position final used
100 40 aa q121 50 20 15 65
100 40 aa q221 50 20 25 90
100 40 aa q321 50 20 10 100
100 40 aa q421 50 20 5 105
50 30 bb q121 25 10 0 25
50 30 bb q221 25 10 10 35
正在做
df['used'] = df['pwr'].sub(df.groupby('id')['date'].cumsum()).sub(df.groupby('id')['base'].cumsum()).add(df.groupby('id')['final'].cumsum())
但是,最后一列计算不正确。任何建议表示赞赏。
解决方案
我们需要先找到第一项,将所有repeated
值设为 NaN ,然后groupby
使用cumsum
s = df['pwr'].sub(df['base']).mask(df['id'].duplicated()).add(df['final'],fill_value=0)
df['new'] = s.groupby(df['id']).cumsum()
df
pwr pos id date base position final new
0 100 40 aa q121 50 20 15 65.0
1 100 40 aa q221 50 20 25 90.0
2 100 40 aa q321 50 20 10 100.0
3 100 40 aa q421 50 20 5 105.0
4 50 30 bb q121 25 10 0 25.0
5 50 30 bb q221 25 10 10 35.0
推荐阅读
- python - 如何避免显示大于 2^16 像素的 matplotlib?
- maven - 如何在 mavenrepository 中向工件添加类别和标签
- flutter - 我的颤振应用程序在打开前冻结在白屏上
- tensorflow - 如何获取Tensorflow中作为张量的函数参数的标量值?
- java - getServletContext().getResourceAsStream 中的 NullPointerException
- pandas - 我是否需要检查完整性使用 pandas 从 s3 上传和下载文件?
- typo3 - TYPO3 9.5:用高级路由配置替换 RealURL 代码
- javascript - Thymeleaf 与 iframe
- qt - Qt:QTimer 创建一个不需要的循环
- python - 使比较 2 个表更快(Postgres/SQLAlchemy)