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

如何用聚类组均值填充数据集中的缺失值(NA)

聚类分组均值填充缺失值的实现方案

核心思路

先预计算每个聚类组的变量均值,再针对缺失值匹配对应组的均值填充。优先用pandas的向量化操作(比循环高效得多),如果出于学习目的需要循环实现,也可以参考下面的代码。

步骤1:计算各组变量均值

假设你的数据集是df,聚类分组列名为cluster,先计算每组的均值:

import pandas as pd

# 按聚类组计算各变量均值
group_means = df.groupby('cluster').mean()

步骤2:高效填充(推荐:向量化操作)

不用循环,用transform直接匹配组均值填充,速度快且代码简洁:

# 对所有含缺失值的列,用对应组的均值填充
df_filled = df.copy()
for col in df_filled.columns:
    if df_filled[col].isna().any():
        df_filled[col] = df_filled.groupby('cluster')[col].transform(lambda x: x.fillna(x.mean()))

或者更简洁的写法:

df_filled = df.apply(lambda col: col.fillna(df.groupby('cluster')[col.name].transform('mean')))

步骤3:循环实现(学习/特定需求用)

如果必须用循环遍历每行处理,代码如下:

df_filled = df.copy()
# 获取所有存在缺失值的列
na_columns = [col for col in df_filled.columns if df_filled[col].isna().any()]

# 遍历每一行(每个国家)
for index, row in df_filled.iterrows():
    current_cluster = row['cluster']
    # 只处理当前行有缺失值的列
    for col in na_columns:
        if pd.isna(row[col]):
            # 用对应组的均值填充
            df_filled.loc[index, col] = group_means.loc[current_cluster, col]

注意事项

  • 确保cluster列没有缺失值,否则填充时会出现匹配错误
  • 填充后可以用df_filled.isna().sum()检查是否还有剩余缺失值
  • 该方法仅适用于数值型变量,如果有分类变量缺失,组均值填充不适用,需另行处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:15:11