0

0

如何根据分组列的众数填充 Pandas DataFrame 中的缺失值

心靈之曲

心靈之曲

发布时间:2026-01-10 14:05:30

|

996人浏览过

|

来源于php中文网

原创

如何根据分组列的众数填充 Pandas DataFrame 中的缺失值

本文介绍使用 pandas 的 `groupby().transform()` 结合 `mode()` 高效填充缺失值的方法,无需手动构建映射表,代码简洁、可读性强且性能优异。

在数据预处理中,按某一列(如 col_B)分组后,用该组内另一列(如 col_A)的众数(most frequent value) 填充其缺失值,是一种常见且语义合理的插补策略。相比全局均值或中位数填充,它能更好保留局部分布特征。

Pandas 提供了优雅的一行式解决方案:利用 groupby().transform() 将聚合结果广播回原始索引长度,并配合自定义函数处理每组内的缺失值。核心思路是:对每组 col_A 数据调用 .mode() 获取众数(注意处理空组),再用 .fillna() 完成替换。

以下是完整实现示例:

Sider
Sider

多功能AI浏览器助手,帮助用户进行聊天、写作、阅读、翻译等

下载
import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'col_A': [8, 7, 20, np.nan, 8, 9, 37, np.nan, np.nan],
    'col_B': [31, 30, 83, 5, 31, 34, 158, 5, 30]
})

# 定义安全的众数填充函数(兼容空组与多众数情况)
def impute_mode(series):
    modes = series.mode()
    if len(modes) > 0:
        return series.fillna(modes.iloc[0])  # 取第一个众数(.mode() 返回 Series)
    else:
        return series.fillna(series.dropna().iloc[0] if len(series.dropna()) > 0 else np.nan)

# 应用分组填充:按 col_B 分组,对 col_A 执行众数填充
df['col_A_filled'] = df.groupby('col_B')['col_A'].transform(impute_mode)

print(df)
✅ 输出说明:当 col_B == 5 时,若该组 col_A 中 1 出现最频繁,则所有 col_B == 5 且 col_A 为 NaN 的行将被填为 1;同理适用于其他 col_B 组别。

注意事项:

  • .mode() 返回 Series,即使只有一个众数也需用 .iloc[0] 提取标量值;
  • 若某组内 col_A 全为 NaN,.mode() 返回空 Series,此时函数回退至 np.nan,避免报错;
  • transform 保证输出长度与原 DataFrame 一致,天然支持赋值到新列;
  • 不推荐使用 apply(lambda x: x.fillna(x.mode().iloc[0])) —— apply 在 transform 上下文中行为不一致,易出错。

该方法完全避免了手动构建索引列表、双重循环和中间 DataFrame,既符合 Pandas 的向量化哲学,又具备良好的可维护性与扩展性(如后续改为中位数或条件众数也只需修改函数内部逻辑)。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

lambda表达式
lambda表达式

Lambda表达式是一种匿名函数的简洁表示方式,它可以在需要函数作为参数的地方使用,并提供了一种更简洁、更灵活的编码方式,其语法为“lambda 参数列表: 表达式”,参数列表是函数的参数,可以包含一个或多个参数,用逗号分隔,表达式是函数的执行体,用于定义函数的具体操作。本专题为大家提供lambda表达式相关的文章、下载、课程内容,供大家免费下载体验。

202

2023.09.15

python lambda函数
python lambda函数

本专题整合了python lambda函数用法详解,阅读专题下面的文章了解更多详细内容。

189

2025.11.08

Python lambda详解
Python lambda详解

本专题整合了Python lambda函数相关教程,阅读下面的文章了解更多详细内容。

41

2026.01.05

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

24

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

72

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Java 教程
Java 教程

共578课时 | 44.3万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号