我有一个数据框,其中包含三个感兴趣的列:“时间”,“峰值”和“周期”。我想计算给定周期的每一行之间的时间。
time peak cycle
0 1 1 1
1 2 0 1
2 3.5 0 1
3 3.8 1 2
4 5 0 2
5 6.2 0 2
6 7 0 2
我想添加第四列,因此完成后数据框将如下所示:
time peak cycle time_elapsed
0 1 1 1 0
1 2 0 1 1
2 3.5 0 1 1.5
3 3.8 1 2 0
4 5 0 2 1.2
5 6.2 0 2 1.2
6 7 0 2 0.8
循环次数是根据峰信息计算得出的,因此我不需要同时引用这两列。
data['time_elapsed'] = data['time'] - data['time'].shift()
应用上面得到的代码:
time peak cycle time_elapsed
0 1 1 1 0
1 2 0 1 1
2 3.5 0 1 1.5
3 3.8 1 2 0.3
4 5 0 2 1.2
5 6.2 0 2 1.2
6 7 0 2 0.8
每当“峰值”中的值为1时,是否有一种方法可以“重置”计算?任何提示或建议将不胜感激!
答案 0 :(得分:0)
减去GroupBy.transform
和GroupBy.first
在Series
中转换的每个组的第一个值:
df['time_elapsed'] = df['time'].sub(df.groupby('cycle')['time'].transform('first'))
print (df)
time peak cycle time_elapsed
0 1 1 1 0
1 2 0 1 1
2 3 0 1 2
3 4 1 2 0
4 5 0 2 1
5 6 0 2 2
6 7 0 2 3
要添加重置,请在Series
列中仅将1
或0
与Series.cumsum
一起添加{{3}}:
peak