You need to enable JavaScript to run this app. 如何为fillna()传入函数,按OSEBuildingID分组填充缺失值
优惠活动
大模型
产品
解决方案
定价
更多

如何为fillna()传入函数,按OSEBuildingID分组填充缺失值

代码失效原因与修复方案

原有代码无效的两个核心问题

  • 未将transform的计算结果赋值回原数据列。pandas的分组类操作默认返回处理后的副本,不会直接修改原DataFrame的列值,即便分组逻辑正确,没有把返回值覆盖到目标列,原数据集的缺失值不会产生任何变化。
  • 众数计算的返回值类型不匹配。Series.mode()的返回值是包含所有出现频次最高值的Series对象,而非单个可用于填充的标量值,直接传入fillna()会因索引无法对齐,导致填充逻辑完全失效。

适配业务场景的正确实现

结合你提到的“同一OSEBuildingID对应的该列取值基本一致”的特征,不需要额外计算组内众数,直接提取同组内的有效非空值填补缺失即可,兼顾执行效率与准确性:

df['LargestPropertyUseTypeGFA'] = df.groupby('OSEBuildingID')['LargestPropertyUseTypeGFA'].transform(
    lambda group: group.fillna(group.dropna().iloc[0]) if len(group.dropna()) > 0 else group
)

如果确实需要按组内众数逻辑填充,需要对mode的返回值做标量提取,避免类型不匹配的问题:

df['LargestPropertyUseTypeGFA'] = df.groupby('OSEBuildingID')['LargestPropertyUseTypeGFA'].transform(
    lambda group: group.fillna(group.mode().iloc[0]) if not group.mode().empty else group
)

补充说明

  • 上述逻辑会自动跳过全组为空值的分组,不会因找不到有效填充值抛出索引越界错误
  • 填充完成后,可以用df['LargestPropertyUseTypeGFA'].isna().sum()校验剩余缺失值规模,确认同建筑ID的可填充缺失已被覆盖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 14:36:02