如何在pandas中计算分组内相邻行的差值
解决方案
你需要的效果可以通过groupby + shift组合实现,无需用到stack,实现逻辑很简单:将同组内的time列向上偏移1位后,减去当前行的time值即可。
完整代码示例
import pandas as pd # 初始化示例数据 df = pd.DataFrame({'group': [1, 1, 1, 2, 2, 3, 3, 3, 3], 'time': [12, 44, 55, 2, 7, 100, 105, 106, 200]}) # 核心计算逻辑 df['diff_to_next_step'] = df.groupby('group')['time'].shift(-1) - df['time'] # 如果你需要把NaN显式转为Python原生None值,可以加下面这行 # df['diff_to_next_step'] = df['diff_to_next_step'].where(df['diff_to_next_step'].notna(), None) print(df)
输出结果
group time diff_to_next_step 0 1 12 32.0 1 1 44 11.0 2 1 55 NaN 3 2 2 5.0 4 2 7 NaN 5 3 100 5.0 6 3 105 1.0 7 3 106 94.0 8 3 200 NaN
注意事项
如果你的原始数据中同组内的time不是按升序排列的,需要先对数据排序再计算差值,避免结果出错:
# 先按分组、时间排序,重置索引 df = df.sort_values(['group', 'time']).reset_index(drop=True) # 再执行差值计算 df['diff_to_next_step'] = df.groupby('group')['time'].shift(-1) - df['time']
内容的提问来源于stack exchange,提问作者Martin Thoma
相关产品推荐
相关产品推荐

