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

Pandas如何用分类均值DataFrame替换原表空值且不丢失分类为空的行

高效实现方案

方案1:基于map映射填充(你已提前生成df_mean的场景)

直接用你已经算好的均值表生成映射关系,全程向量化操作,200万行数据可秒级完成:

# 将df_mean转为【分类: 对应均值】的字典映射
mean_mapping = df_mean.set_index('main_category_en')['eco_score'].to_dict()

# 仅对符合条件的空值做填充
df['eco_score'] = df['eco_score'].fillna(df['main_category_en'].map(mean_mapping))

该逻辑完全匹配你的需求:

  • 若main_category_en为NaN,map返回结果为NaN,fillna不会修改该行原有eco_score的值,不会丢失行
  • 若eco_score本身非空,fillna不会做任何修改
  • 若分类不在均值表中,同样不会修改原有空值,和你的循环逻辑完全一致

方案2:无需提前生成df_mean的一步实现方案

如果不需要单独保留均值表,可以直接用分组transform完成计算+填充:

df['eco_score'] = df['eco_score'].fillna(df.groupby('main_category_en')['eco_score'].transform('mean'))

原循环效率低的原因

逐行遍历是Python层级的循环,每次索引取值、判断、赋值都要跨Python和pandas底层接口,200万行数据处理自然耗时极长。上述方案均为pandas底层C实现的向量化操作,性能是Python循环的数百上千倍。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:36:02