我有以下数据集:
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的每个值都相同。我想创建一个新列,该列会累计“值”列,但仅当每个ID更改时才累加。V
所以,而不是得到
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句