python - 使用熊猫按不同列分组后,如何使用时间和数据列查找连续行的变化率?
问题描述
我有一个形式的熊猫数据框:
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
我该怎么做?
解决方案
您可以使用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
推荐阅读
- javascript - 模型重叠
- kubernetes - Kubernetes 中的 Apache Flink 部署 - 可用性和可扩展性
- go - 如何同步常量写入和周期性读取和更新
- javascript - 当动态添加项目时,为什么 ::before CSS 选择器不适用于列表项目?
- reactjs - 无法在 IE11 中运行反应应用程序:提供给 `Provider` 的无效道具`children`
- html - 如何使用基于 DOM 元素的 AngularJS 隐藏元素
- arrays - 使用 powershell 在数组字符串中创建换行符
- git - 来自詹金斯管道的 Git 推送
- c# - 处理大量数据加载到列表视图中并定期重新填充以进行搜索的最佳方法
- meteor - 未捕获的类型错误:require.ensure 不是 Object.getComponent 的函数(ECMASCRIPT)