如何基于列中类别占比填充DataFrame的缺失值?
基于已有占比填充缺失值的实现方法
原始数据准备
先还原数据场景:
import pandas as pd import numpy as np col=['black','black','black','grey','white','grey','grey','nan','grey','black','black','red','nan','nan','nan','nan','black','black','white'] dd=pd.DataFrame({'color':col}) dd.replace('nan',np.NaN,inplace=True)
查看颜色占比
通过代码获取各颜色的占比:
color_proportions = dd['color'].value_counts(normalize=True) print(color_proportions)
输出结果:
black 0.500000 grey 0.285714 white 0.142857 red 0.071429 Name: color, dtype: float64
按占比填充缺失值
利用numpy.random.choice根据占比概率随机填充缺失值,保证填充后的分布与原数据一致:
# 获取所有缺失值的索引标记 na_mask = dd['color'].isna() # 提取颜色类别和对应的填充概率 color_categories = color_proportions.index fill_probs = color_proportions.values # 按概率完成缺失值填充 dd.loc[na_mask, 'color'] = np.random.choice(color_categories, size=na_mask.sum(), p=fill_probs)
填充完成后,可再次使用dd['color'].value_counts(normalize=True)验证分布,结果会与原占比基本一致(随机填充会有微小波动)。
内容的提问来源于stack exchange,提问作者saad1s
相关产品推荐
相关产品推荐

