用对应年龄/年龄段均值填充Dataframe中Cholesterol列的NaN值
用年龄段均值填充Pandas DataFrame中缺失的胆固醇值
步骤说明及代码实现
- 划分年龄段区间
根据数据分布自定义年龄区间,比如按10岁为间隔划分。用pd.cut()给每条数据打上对应的年龄段标签:
import pandas as pd # 自定义年龄区间和标签 bins = [0, 30, 40, 50, 60, 70, 100] age_labels = ['<30', '30-40', '40-50', '50-60', '60-70', '70+'] # 为DataFrame添加年龄段列 df['Age_Group'] = pd.cut(df['Age'], bins=bins, labels=age_labels, right=False)
right=False表示区间左闭右开,比如30-40包含30岁但不包含40岁,你可以根据需求调整这个参数。
- 计算各年龄段的胆固醇均值
用groupby()结合transform()计算每个年龄段的胆固醇均值,transform()会自动把均值匹配到对应行,方便后续填充:
# 计算每个年龄段的胆固醇均值(自动跳过NaN) group_means = df.groupby('Age_Group')['Cholesterol'].transform('mean')
- 填充缺失值
用fillna()把Cholesterol列的NaN值替换为对应年龄段的均值:
# 填充缺失值 df['Cholesterol'] = df['Cholesterol'].fillna(group_means)
额外优化
如果某个年龄段的所有胆固醇值都是NaN,上面的方法会导致该组的缺失值仍然是NaN。这种情况下可以用整体胆固醇均值兜底填充:
# 先按年龄段填充,再用整体均值补漏 df['Cholesterol'] = df['Cholesterol'].fillna(group_means).fillna(df['Cholesterol'].mean())
内容的提问来源于stack exchange,提问作者Thomas Marsden
相关产品推荐
相关产品推荐

