首页 > 解决方案 > 使用熊猫按不同列分组后,如何使用时间和数据列查找连续行的变化率?

问题描述

我有一个形式的熊猫数据框:

df

ID_col time_in_hours data_col
  1        62.5         4
  1        40           3
  1        20           3
  2        30           1
  2        20           5
  3        50           6

我想要做的是,通过使用 time_in_hours 列找到data_col的变化率。具体来说,

rate_of_change = (data_col[i+1] - data_col[i]) / abs(time_in_hours[ i +1] - time_in_hours[i])

其中i是给定的行,rate_of_change是针对不同的 ID 单独计算的

实际上,我想要一个新的 DataFrame 形式:

新的_df

ID_col time_in_hours data_col  rate_of_change
  1        62.5         4          NaN
  1        40           3         -0.044
  1        20           3          0
  2        30           1          NaN
  2        20           5          0.4
  3        50           6          NaN

我该怎么做?

标签: pythonpandasnumpy

解决方案


您可以使用groupby

s = df.groupby('ID_col').apply(lambda dft: dft['data_col'].diff() / dft['time_in_hours'].diff().abs())
s.index = s.index.droplevel()
s

返回

0         NaN
1   -0.044444
2    0.000000
3         NaN
4    0.400000
5         NaN
dtype: float64

推荐阅读