python-3.x - 根据条件在数据框中创建新列
问题描述
对于数据框 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']*df['White_ratio']).where(df['category']=='W')
这有效,但仅适用于一个类别。我将不胜感激这方面的任何帮助。
谢谢。
解决方案
使用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
推荐阅读
- c# - c# - razor - mvc - 视图定义的分页 - 如何复制 RenderBody 行为?
- reactjs - React Native 动态样式,给一个元素添加样式
- excel - 如何根据工作表最后一列中的单元格值隐藏行?
- python - Python 脚本从主目录运行
- angular - 如何在 Angular 6 中进行同步调用
- sql - 多个间接关系的 SQL 查询
- angular - 为什么我从 url 得到一些空数组
- operating-system - x86_64 nasm 跳转到错误的位置
- wso2 - wso2 api manager 工件关联错误多租户
- c# - 在电子邮件中插入表格,仅显示表格语法,例如。
我正在尝试在电子邮件中插入一个表格,但它只显示电子邮件消息正文的语法。
附件是输出;
mail.Subject = "Blah Service Alert - " + application + " Upg