python - 基于仅针对新 ID 累积的另一列创建累积列
问题描述
我有以下数据集:
Time = ['00:01', '00:02','00:03','00:01','00:02','00:03','00:01','00:02','00:03']
ID = [1, 1, 1, 2, 2, 2, 3, 3, 3]
Value = [3.5, 3.5, 3.5, 4.1, 4.1, 4.1, 2.3, 2.3, 2.3]
df = pd.DataFrame({'Time':Time, 'ID':ID, 'Value':Value})
每个 ID 的每个值都相同。我想创建一个新列,累积累加 Value 列,但仅在每个 ID 更改时。五
所以而不是得到
3.5 7 10.5 14.6 18.7 22.8 25.1 27.3 29.5
我想
3.5 3.5 3.5 7.6 7.6 7.6 9.9 9.9 9.9
解决方案
用于.loc
分配您的价值,
shift
测试 ID 变化的地方
然后
cumsum
用ffill
df.loc[:, "Val"] = df[df["ID"].ne(df["ID"].shift())][
"Value"
].cumsum()
df['Val'] = df['Val'].ffill()
print(df)
Time ID Value Val
0 00:01 1 3.5 3.5
1 00:02 1 3.5 3.5
2 00:03 1 3.5 3.5
3 00:01 2 4.1 7.6
4 00:02 2 4.1 7.6
5 00:03 2 4.1 7.6
6 00:01 3 2.3 9.9
7 00:02 3 2.3 9.9
8 00:03 3 2.3 9.9
或更简单地按照 Ch3steR 的建议
df['Value'].where(df['Value'].ne(df['Value'].shift(1))).cumsum().ffill()
0 3.5
1 3.5
2 3.5
3 7.6
4 7.6
5 7.6
6 9.9
7 9.9
8 9.9
推荐阅读
- xml - 基于键的 XML 分组
- javascript - 点击展开一张卡片
- asp.net-core - 如何在多个部署环境之间管理微服务架构中的配置文件?
- pine-script - 在交易视图中回测以 Pine Script 编写的策略时,“无数据”错误的原因是什么?
- haskell - 处理可能在 do 块中并提取一个值
- reporting-services - 在同一文本框中添加两个超链接
- mysql - 只需更改配置即可在 JPA 和 MongoDB 之间切换
- asp.net - 监控 asp.net 中使用了哪些表单
- excel - VBA 不刷新计算单元格和链接
- python - 我应该使用哪种协议进行 Raspberry Pi 通信?