基于id分组众数的x1列缺失值高效填充方案问询
用分组众数高效填充DataFrame缺失值
这里有个高效的解决方案,借助Pandas的groupby+transform特性,只需要一次分组计算就能批量完成所有缺失值的填充,避免了逐个处理的低效操作:
完整实现代码
import pandas as pd import numpy as np # 示例DataFrame df = pd.DataFrame({'id': [1, 1, 2, 3, 1, 1, 1, 1, 4, 5], 'x1': ['a', np.nan, 'b', 'c', 'e', 'e', 'e', 'f', 'g', 'h']}) # 定义函数:获取每组的第一个众数(处理多众数/全缺失情况) def get_group_mode(x): mode_result = x.mode() # 若分组无有效值(全为NaN),返回NaN避免报错 return mode_result.iloc[0] if not mode_result.empty else np.nan # 填充缺失值:用对应id分组的众数替换x1的NaN df['x1'] = df['x1'].fillna(df.groupby('id')['x1'].transform(get_group_mode))
运行结果
处理后的DataFrame中,id=1对应的缺失值会被替换为该组的众数e:
id x1 0 1 a 1 1 e 2 2 b 3 3 c 4 1 e 5 1 e 6 1 e 7 1 f 8 4 g 9 5 h
方案优势
你原来的方法需要逐个提取缺失记录的id,再单独计算对应分组的众数,这种方式会重复执行分组和统计操作,数据量越大计算成本越高。而本方案仅需一次groupby操作即可批量计算所有分组的众数,再通过transform自动将众数映射到对应id的每一行,效率提升显著。
内容的提问来源于stack exchange,提问作者pradeepvaranasi
相关产品推荐
相关产品推荐

