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

Pandas分组滚动求和结果赋值后全为NaN的问题求助

解决Pandas Rolling分组求和后赋值出现NaN的问题

问题根源

出现全NaN的核心原因是索引对齐失败:

  • groupby('user_id')['v1'].rolling('3D').sum()返回的结果带有多层索引(user_id + create_at)
  • 你执行reset_index(drop=True)后,结果变成了默认整数索引,和原数据d1的create_at索引完全不匹配,Pandas按索引匹配赋值时找不到对应项,因此全为NaN。

两种可行解决方法

方法1:直接提取结果值赋值

分组Rolling计算后的结果顺序和原数据行顺序完全一致,直接提取值数组即可完成赋值:

# 计算分组滚动求和
roll_sum = d1.groupby('user_id')['v1'].rolling('3D').sum()
# 提取值数组赋值给新列
d1['roll_3D'] = roll_sum.values

方法2:使用transform方法(推荐)

transform方法会自动将分组计算的结果对齐回原数据的索引,无需手动处理索引逻辑:

d1['roll_3D'] = d1.groupby('user_id')['v1'].transform(lambda x: x.rolling('3D').sum())

验证结果

用你的测试数据执行上述方法后,会得到正确的赋值结果:

create_atuser_idv1roll_3D
2022-05-31 21:00:21.150822159912470.0280590.028059
2022-05-31 21:00:33.620000240625211.7813991.781399
2022-05-31 21:01:30.349000126100250.9524000.952400
2022-05-31 21:02:38.836000240625211.5718993.353298
2022-05-31 21:02:44.156000240625210.9526004.305898

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 19:01:17