Python中如何按某列类别聚合,填充另一列的空值
实现方案
提供三种最常用的工具实现方式,可根据你的使用场景选择:
Python(Pandas)实现
假设你的数据已读取为DataFrame对象df,对应列名为教育程度、薪资:
# 计算基础教育群体的平均薪资(默认自动排除空值) basic_avg_salary = df[df['教育程度'] == '基础教育']['薪资'].mean() # 仅填充基础教育群体的薪资空值 df.loc[(df['教育程度'] == '基础教育') & (df['薪资'].isna()), '薪资'] = basic_avg_salary
注意:两个过滤条件必须分别用括号包裹,避免Pandas运算优先级报错
SQL 实现
假设表名为user_salary,对应字段为education_level、salary,适配MySQL 8.0+、PostgreSQL、SQL Server等主流数据库:
UPDATE user_salary u SET salary = ( SELECT AVG(salary) FROM user_salary WHERE education_level = '基础教育' AND salary IS NOT NULL ) WHERE u.education_level = '基础教育' AND u.salary IS NULL;
子查询中显式加salary IS NOT NULL是为了和Pandas的均值计算逻辑保持一致,避免空值参与运算拉低结果
Excel 实现
假设教育程度列为A列,薪资列为B列,首行为表头:
- 找空白单元格计算基础教育平均薪资,公式为
=AVERAGEIF(A:A,"基础教育",B:B),假设计算结果存在C1单元格 - 选中B列整列,按
Ctrl+G调出定位窗口,点击「定位条件」选择「空值」,确定后会选中所有薪资为空的单元格 - 保持选中状态,输入公式
=IF(A2="基础教育",$C$1,B2),按Ctrl+Enter批量填充所有选中的空值即可
内容的提问来源于stack exchange,提问作者Bruna
相关产品推荐
相关产品推荐

