让我们说我有一个数据框,它的列Quality
的值为[Poor, Average, Good, Excellent]
。
该帧具有120个值,其中20个是NaN
,其余100个具有20个,30个,40个,10个[Poor, Average, Good, Excellent]
。
是否有任何简便的方法用NaN
中的值替换20 [Poor, Average, Good, Excellent]
行,以使整个框架的比例保持在20%不良,30%平均值,40%良好和10%使用Python,Pandas和NumPy很好吗?
想法是在填充NaN
之后保留原始比例,而不考虑数据集的大小。
答案 0 :(得分:0)
不确定是否有更简单的方法,我编写了此函数来实现所需的功能。
def replace_with_proportion(frame, column):
isnull = frame[column].isnull()
sample = frame[column].dropna()
sample=set(sample)
countframe=pd.DataFrame(columns=["name", "count", "proportion"])
for x in sample:
countframe.loc[-1] = [x,frame.loc[frame[column] == x].shape[0], 0 ]
countframe.index = countframe.index + 1
countframe['proportion']=countframe['count']/countframe['count'].sum()
to_fill=np.random.choice(countframe['name'], size=(frame[column].isnull().sum(),), p=countframe['proportion'])
frame.loc[isnull, column] = to_fill
return frame