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

Pandas按id分组计算date=0的profit均值并填充至原表所有对应行

问题原因

你遇到的NaN问题是因为df_filter仅包含date==0的行,分组计算得到的结果只有df_filter对应索引位置有值,赋值回原DataFrame时,date==1的行没有匹配的索引值,所以自动填充为NaN。

实现方法

方法1:先计算id维度的均值映射,再全量匹配(最简洁)

先筛选date==0的行按id分组计算均值,再通过id列映射到原表所有行:

# 计算每个id对应的date=0的profit均值
id_profit_mean = df[df['date'] == 0].groupby('id')['profit'].mean()
# 映射到原表所有行
df['affect'] = df['id'].map(id_profit_mean)

方法2:分组时直接指定计算规则,无需预筛选

直接对原表按id分组,在聚合逻辑里仅计算该分组下date=0行的均值,一次性生成全量的affect列:

df['affect'] = df.groupby('id')['profit'].transform(
    lambda x: x[df.loc[x.index, 'date'] == 0].mean()
)

方法3:补全你已生成的含NaN的affect列

如果你已经按原有代码生成了带NaN的affect列,直接按id分组做前后填充即可(前提是每个id至少存在1条date=0的记录):

df['affect'] = df.groupby('id')['affect'].ffill().bfill()

以上三种方法都可以得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:24:02