首页 > 解决方案 > 如何根据多列和条件填充 pandas DataFrame?

问题描述

我目前正在从事一个爱好项目,但我一直坚持在 pandas 中填充 DataFrame。我有三个数据框。我的问题:

谁能帮帮我吗?

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 |

标签: pythonpandasdataframe

解决方案


如果我理解正确,您希望使用DataFrame.merge两次链接来连接所有 3 个数据框,然后有条件地创建我们可以传递多个条件的ynp.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

推荐阅读