计算在不同列中定义的每个组的数据框中相邻行(十进制数)的差异

时间:2019-06-07 13:43:50

标签: python python-3.x pandas

我有一个数据框,其中包含三个感兴趣的列:“时间”,“峰值”和“周期”。我想计算给定周期的每一行之间的时间。

   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时,是否有一种方法可以“重置”计算?任何提示或建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

减去GroupBy.transformGroupBy.firstSeries中转换的每个组的第一个值:

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列中仅将10Series.cumsum一起添加{{3}}:

peak