按 Pandas 中其他值的比率填充缺失值

Fill missing Values by a ratio of other values in Pandas

我在 Pandas 的 Dataframe 中有一个列有大约 78% 的缺失值。

其余 22% 的值按以下比例分配给三个标签 - SC、ST、GEN。

SC - 16% ST - 8% 创 - 76%

我需要用上面三个值来替换缺失值,这样所有元素的比例都和上面一样。只要比例保持如上,分配就可以是随机的。

我该如何完成?

从这个 DataFrame 开始(只是为了创建与你的类似的东西):

import numpy as np
df = pd.DataFrame({'C1': np.random.choice(['SC', 'ST', 'GEN'], p=[0.16, 0.08, 0.76], 
                                          size=1000)})
df.loc[df.sample(frac=0.22).index] = np.nan

它产生了一个包含 22% NaN 的列,其余比例与您的相似:

df['C1'].value_counts(normalize=True, dropna=False)
Out: 
GEN    0.583
NaN    0.220
SC     0.132
ST     0.065
Name: C1, dtype: float64

df['C1'].value_counts(normalize=True)
Out: 
GEN    0.747436
SC     0.169231
ST     0.083333
Name: C1, dtype: float64

现在您可以将 fillna 与 np.random.choice 一起使用:

df['C1'] = df['C1'].fillna(pd.Series(np.random.choice(['SC', 'ST', 'GEN'], 
                                                      p=[0.16, 0.08, 0.76], size=len(df))))

生成的列将具有以下比例:

df['C1'].value_counts(normalize=True, dropna=False)
Out: 
GEN    0.748
SC     0.165
ST     0.087
Name: C1, dtype: float64