python - 如何根据多列和条件填充 pandas DataFrame?
问题描述
我目前正在从事一个爱好项目,但我一直坚持在 pandas 中填充 DataFrame。我有三个数据框。我的问题:
- 对于 中的每个
id
,如果列等于,则将列DataFrame1
添加n
到列x
中。DataFrame3
m
1
- 对于每个
id
inDataFrame1
并将DataFrame2
column 设置y
为1
if columnc
inDataFrame1
is equal to1
or if columnd
inDataFrame2
is equal to1
。c
等于99
具有最高优先级并设置y
为99
谁能帮帮我吗?
DataFrame1
| id | n | m | c |
|--------|------|---|---|
| 577140 | bla1 | 0 | 0 |
| 577140 | bla2 | 0 | 0 |
| 577140 | bla3 | 0 | 0 |
| 577140 | bla4 | 1 | 0 |
| 577140 | bla5 | 0 | 1 |
| 577141 | bla6 | 0 | 0 |
| 577141 | bla7 | 0 | 0 |
| 577141 | bla8 | 1 | 0 |
DataFrame2
| id | d |
|--------|---|
| 577140 | 1 |
| 577141 | 0 |
DataFrame3 (currently)
| id |
|--------|
| 577140 |
| 577141 |
DataFrame3 (needed)
| id | x | y |
|--------|------|---|
| 577140 | bla4 | 1 |
| 577141 | bla8 | 0 |
解决方案
如果我理解正确,您希望使用DataFrame.merge
两次链接来连接所有 3 个数据框,然后有条件地创建我们可以传递多个条件的y
列np.select
df_temp = pd.merge(df3, df1[df1.m == 1], on='id').merge(df2, on='id')
# Create column y with multiple conditions
conditions = [
df_temp['c'] == 99,
(df_temp['c'] == 1) | (df_temp['d'] == 1)
]
choices = [99, 1]
df_temp['y'] = np.select(conditions, choices, default=0)
# Select only columns we need for output
df_final = df_temp[['id', 'n', 'y']]
print(df_final)
id n y
0 577140 bla4 1
1 577141 bla8 0
推荐阅读
- sql - 如何从单个列上带有附加 where 子句的表中进行选择
- .net - 由于 system.net.http 缺少参考的问题,无法使用 Microsoft Graph 3.2.0 运行 C# 应用程序
- sonarqube - 分析成功后如何在单独的调用中将 JaCoCo 报告上传到 SonarQube?
- makefile - CalculiX 安装错误 etime (在函数 `second_':)
- css - 是否可以在 CSS 中设置子字符串的样式?
- python - 如何在 Flask admin 中的 GUI/请求中更改输入数据,然后再转换为表单?如果编辑/创建模型
- php - 第 60 行 /bootstrap/start.php 中的 Laravel 错误 \Illuminate\Foundation\start.php 没有这样的文件
- javascript - AWS Lambda 和 DynamoDB 上的 Node.js
- youtube - 有没有办法邀请用户使用 API 管理 Youtube?
- python - Django rest框架,序列化方法字段不保存对db的更改?