Pandas按用户分组计算DataFrame产量逐期差值问题求助
解决方案
首先请先确保你的DataFrame已经按照User和Timestamp升序排序,避免因为时间顺序混乱导致差值计算错误,随后使用如下代码即可:
# 先按用户+时间排序,保证顺序正确 df = df.sort_values(by=['User', 'Timestamp']).reset_index(drop=True) # 分组计算差值,空值用当期产量填充 df['Difference'] = df.groupby('User')['Production'].diff().fillna(df['Production'])
运行后得到的Difference列完全符合你的预期结果。
问题原因说明
- 你第一次写的
groupby('User')['Production'].diff()逻辑本身是正确的,默认计算规则就是「当期值 - 同组前一个值」,但每个分组的第一行没有前序值,返回结果为NaN,你没有对这部分NaN做替换,所以没有得到预期结果。 - 后续自定义lambda代码的问题:
- 差值计算顺序搞反了:你写的
x['Production'].shift(+1) - x['Production']是「上一期值减当期值」,和你需要的计算逻辑相反,会得到负数结果 - 若分组apply后的索引和原表索引没有对齐,也会导致用户切换行的结果匹配错误,用pandas内置的diff方法不需要手动处理索引对齐,稳定性更高。
- 差值计算顺序搞反了:你写的
内容的提问来源于stack exchange,提问作者mandiatodos
相关产品推荐
相关产品推荐

