You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中仅对相同Index(Id)行执行shift列差值计算

解决方案:按Id分组后计算组内差值

你现在遇到的问题是全局shift会跨不同Id的行计算差值,想要只在相同Id内计算的话,只需要先按Id列分组,再在每个分组里执行差值计算就可以啦!

具体代码实现

你可以直接用groupby配合diff方法(和你原来的x - x.shift(-1)逻辑完全一致):

df['Difference'] = df.groupby('Id')['A'].diff(-1)

或者如果你更习惯用shift的写法,也可以这样写:

df['Difference'] = df.groupby('Id')['A'].apply(lambda x: x - x.shift(-1))

为什么这样有效?

原来的df['A'].shift(-1)是对整个A列做偏移,完全不考虑Id的分组关系,所以会出现不同Id的行互相相减的情况。而用groupby('Id')之后,Pandas会把数据拆分成多个子DataFrame(每个子DataFrame对应一个唯一的Id),然后在每个子DataFrame内部独立执行diff(-1)或者shift操作,这样就保证了只有相同Id的行才会参与差值计算,每个分组的最后一行因为没有下一行,差值会自动变成NaN,正好符合你想要的效果~

内容的提问来源于stack exchange,提问作者user96564

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:48