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

按产品分组用均值填充RANK列NaN值时遇TypeError报错求助

解决DataFrame按产品分组填充RANK字段NaN值的问题

你遇到的这个报错问题根源在于代码里的两个关键错误,咱们一步步拆解:

  • inplace=True的误用:当你设置inplace=True时,fillna()方法会直接修改原数据并返回None。你把这个None赋值给了df,后续循环里再对df做索引操作自然就会抛出TypeError,因为None没有__getitem__方法(也就是不能用[]索引)。
  • 循环中覆盖原DataFrame的问题:每次循环你都把df重新赋值为单个产品的切片处理结果,这会导致原DataFrame被逐步覆盖,最后只剩下最后一个产品的数据,完全不符合你的需求。

推荐的高效解决方案

用Pandas内置的groupby+transform方法,这是处理这类分组填充问题的最优方式,不用手动写循环:

df['RANK'] = df.groupby('PRODUCT')['RANK'].transform(lambda x: x.fillna(x.mean()))

这段代码的逻辑:

  1. groupby('PRODUCT'):按PRODUCT字段对DataFrame分组
  2. transform:将每个分组的计算结果(该组RANK的均值)广播回原DataFrame对应的位置,完美保留原数据的结构
  3. 匿名函数里用当前分组的均值填充组内的NaN值

如果你想保留循环思路(不推荐,效率较低)

可以修改代码避免覆盖原数据和误用inplace:

# 先复制原DataFrame,防止修改原始数据
df_filled = df.copy()
for product in df['PRODUCT'].unique():
    # 计算当前产品的RANK均值
    rank_mean = df[df['PRODUCT'] == product]['RANK'].mean()
    # 定位到当前产品的RANK列,填充NaN值
    df_filled.loc[df_filled['PRODUCT'] == product, 'RANK'] = df_filled.loc[df_filled['PRODUCT'] == product, 'RANK'].fillna(rank_mean)
print(df_filled)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:00