python - 使用 Pandas 按不同列分组后,如何使用时间和数据列查找连续行的变化率?

标签 python pandas numpy

我有一个以下形式的 pandas DataFrame:

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 形式:

new_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

我该怎么做?

最佳答案

您可以使用 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

关于python - 使用 Pandas 按不同列分组后,如何使用时间和数据列查找连续行的变化率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52595038/

相关文章:

python - 如何将字典打包到结构中,以便我可以将其存储在文件中并稍后解压

python - 从 DataFrame 创建排列而不重复

python - 有没有办法在数据框中打印某个条件的先前日期时间值?

python - 从交易数据框( Pandas )标记客户

pandas - 为什么我在使用 polyfit 函数时得到 "ValueError: data type <class ' numpy.object _'> not inexact."?

python - 加速 Python 中的模运算

python - 从列表列表中删除列表 Python

python - 从单元测试套件中删除测试

python - 链接分组、过滤和聚合

解决这个矩阵的 Pythonic 方法