首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Pandas中其他值的比率填充缺少的值

通过Pandas中其他值的比率填充缺少的值
EN

Stack Overflow用户
提问于 2016-08-13 23:17:19
回答 1查看 1.9K关注 0票数 2

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

剩下的22%的值被分配给三个标签- SC,ST,GEN,具有以下比率。

SC -16%ST-8%Gen- 76%

我需要用上述三个值替换缺少的值,以便所有元素的比率保持不变。只要比率保持不变,分配可以是随机的。

我该如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-13 23:30:03

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

代码语言:javascript
复制
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,其余的比例与您的相似:

代码语言:javascript
复制
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一起使用:

代码语言:javascript
复制
df['C1'] = df['C1'].fillna(pd.Series(np.random.choice(['SC', 'ST', 'GEN'], 
                                                      p=[0.16, 0.08, 0.76], size=len(df))))

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

代码语言:javascript
复制
df['C1'].value_counts(normalize=True, dropna=False)
Out: 
GEN    0.748
SC     0.165
ST     0.087
Name: C1, dtype: float64
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38934140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档