对于数据框df:
dummy_data1 = {'category': ['White', 'Black', 'Hispanic','White'],
'Pop':['75','85','90','100'],'White_ratio':[0.6,0.4,0.7,0.35],'Black_ratio':[0.3,0.2,0.1,0.45], 'Hispanic_ratio':[0.1,0.4,0.2,0.20] }
df = pd.DataFrame(dummy_data1, columns = ['category', 'Pop','White_ratio', 'Black_ratio', 'Hispanic_ratio'])
我想通过首先检查类别,然后将“ Pop”中的值乘以列中的相应比率值,来向此数据框添加一个新列“ pop_n”。对于第一行,类别为“白色”,因此应将75乘以0.60并将45放入pop_n列。我想到写类似的东西:
df['pop_n']= (df['Pop']\*f['White_ratio']).where(df['category']=='W')
这有效,但仅适用于一个类别。我将不胜感激。
谢谢。
问题来源:stackoverflow
使用DataFrame.filter
和DataFrame.lookup
:
首先,我们使用filter来获取名称中带有ratio的列。然后拆分并保留第一个单词仅在下划线之前。
最后,我们使用lookup
将category
值匹配到这些列。
# df['Pop'] = df['Pop'].astype(int)
df2 = df.filter(like='ratio').rename(columns=lambda x: x.split('_')[0])
df['pop_n'] = df2.lookup(df.index, df['category']) * df['Pop']
category Pop White_ratio Black_ratio Hispanic_ratio pop_n
0 White 75 0.60 0.30 0.1 45.0
1 Black 85 0.40 0.20 0.4 17.0
2 Hispanic 90 0.70 0.10 0.2 18.0
3 White 100 0.35 0.45 0.2 35.0
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。