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

如何使用SimpleImputer按行业分组均值填补员工数、预算列的NaN缺失值

结论

原生SimpleImputer无法直接实现按行业分组填充的需求,它仅支持全局维度的统计值填充,没有内置分组计算的逻辑。你可以用以下两种方案实现需求:


方案1:直接用Pandas实现(最简便)

你当前把DataFrame转成了numpy数组X反而丢失了列名和分组关联信息,建议先在DataFrame层面处理完缺失值再转成数组:

import pandas as pd
import numpy as np

dataset = pd.read_csv('Group A.csv')
# 按行业分组,对员工数、预算两列用对应分组的均值填充缺失值
dataset[['# of Employees', '# Budget']] = dataset.groupby('Industry')[['# of Employees', '# Budget']].transform(
    lambda x: x.fillna(x.mean())
)
# 处理完缺失值后再生成你需要的特征数组X
X = dataset.iloc[:, :-1].values

如果存在某行业下某列所有值都是空的情况,可以加兜底逻辑,fallback到全局均值填充:

cols_to_impute = ['# of Employees', '# Budget']
global_means = dataset[cols_to_impute].mean()
dataset[cols_to_impute] = dataset.groupby('Industry')[cols_to_impute].transform(
    lambda x: x.fillna(x.mean() if not pd.isna(x.mean()) else global_means[x.name])
)

方案2:兼容Sklearn接口实现(需放入Pipeline流程时使用)

如果你需要把填充逻辑嵌入Sklearn的Pipeline工作流,可以自定义分组填充转换器:

from sklearn.base import BaseEstimator, TransformerMixin
import pandas as pd

class GroupMeanImputer(BaseEstimator, TransformerMixin):
    def __init__(self, group_col, impute_cols):
        self.group_col = group_col
        self.impute_cols = impute_cols
        self.group_means_ = None
        self.global_means_ = None
    
    def fit(self, X, y=None):
        self.group_means_ = X.groupby(self.group_col)[self.impute_cols].mean()
        self.global_means_ = X[self.impute_cols].mean()
        return self
    
    def transform(self, X):
        X_copy = X.copy()
        for col in self.impute_cols:
            X_copy[col] = X_copy.apply(
                lambda row: self.group_means_.loc[row[self.group_col], col] 
                if pd.isna(row[col]) and not pd.isna(self.group_means_.loc[row[self.group_col], col])
                else self.global_means_[col] if pd.isna(row[col])
                else row[col], 
                axis=1
            )
        return X_copy

# 调用示例
dataset = pd.read_csv('Group A.csv')
imputer = GroupMeanImputer(group_col='Industry', impute_cols=['# of Employees', '# Budget'])
dataset = imputer.fit_transform(dataset)
X = dataset.iloc[:, :-1].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:36:05