我在Pandas的Dataframe中有一列,大约有78%的值缺失。
剩下的22%的值被分配给三个标签- SC,ST,GEN,具有以下比率。
SC -16%ST-8%Gen- 76%
我需要用上述三个值替换缺少的值,以便所有元素的比率保持不变。只要比率保持不变,分配可以是随机的。
我该如何做到这一点?
发布于 2016-08-13 23:30:03
从这个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: float64https://stackoverflow.com/questions/38934140
复制相似问题