按 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
我在 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