基于Country列分组填充DataFrame中的缺失值
看起来你找的方向完全没错!按Country分组计算特征均值来填充缺失值,就是处理这类问题的最优解,大概率是在实现细节上卡壳了对吧?我给你手把手捋一遍具体怎么做:
按国家分组填充缺失值的实操步骤
1. 先算每个国家的特征均值
首先用groupby按国家分组,计算你需要填充的两列的均值:
# 计算每个国家对应特征的均值 country_feature_means = data.groupby('Country')[['Advanced skiers, freeriders', 'Snow parks']].mean()
这一步会得到一个以国家名为索引的小DataFrame,每一行就是对应国家两个特征的平均值。
2. 用分组均值填充对应国家的NaN
这里的关键是用transform方法——它能把分组计算出的均值,自动匹配回原DataFrame对应的行,不用你手动去对齐索引:
# 针对需要填充的列,用分组均值替换NaN fill_cols = ['Advanced skiers, freeriders', 'Snow parks'] data[fill_cols] = data.groupby('Country')[fill_cols].transform(lambda x: x.fillna(x.mean()))
举个例子,你的样本里Norway有一行是NaN/NaN,就会被替换成Norway这两个特征的均值(也就是3.0和4.0)。
3. 可选:给全NaN的国家做兜底填充
如果有些国家的某个特征全是NaN(比如样本里的Greece,两个特征都没有有效值),上面的方法处理后还是NaN。如果需要用整个特征的全局均值来兜底,可以再加这一步:
# 用全局均值填充剩余的NaN data[fill_cols] = data[fill_cols].fillna(data[fill_cols].mean())
验证填充效果
处理完后可以用下面的代码检查缺失值是否清理干净:
# 查看各列剩余的缺失值数量 print(data.isna().sum()) # 或者直接看样本数据 print(data.head())
内容的提问来源于stack exchange,提问作者theotheraussie
相关产品推荐
相关产品推荐

