将Python上的多个列与单个值匹配

2024-06-09 08:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望你做得很好。 我正在尝试基于多列执行匹配,其中df1的B列的值分散在df2的三到四列中。这里的目标是,如果B列的值与C、D、E列中的任何值匹配,则返回df2的A列的值。 到目前为止,我所做的实际上是进行多个左合并(并更改B列的名称以匹配df2的C、D、E列的名称)。 我试图简化这个过程,但我不确定我该怎么做? 我的数据集如下所示:

Df1:

    ID
0   77  
1   4859    
2   LSP

DF2:

    X           id1             id2             id3
0   AAAAA_XX    889             77              BSP
1   BBBBB_XX    4859            CC              998P
2   CCCC_YY     YUI             TYU             LSP

我的目标是在df1中:

    ID     X
0   77     AAAAA_XX
1   4859   BBBBB_XX 
2   LSP    CCCC_YY

多谢各位


Tags: 数据名称id目标过程ccccdf1df2
2条回答

^{}^{}一起使用:

df = df1.merge(df2.melt(id_vars='X', value_name='ID').drop('variable', axis=1), 
               how='left', 
               on='ID')
print (df)
     ID         X
0    77  AAAAA_XX
1  4859  BBBBB_XX
2   LSP   CCCC_YY

如果可能,可以使用重复的ID

df = (df1.merge(df2.melt(id_vars='X', value_name='ID')
                  .drop('variable', axis=1)
                  .drop_duplicates('ID'),
                how='left', 
                on='ID'))

您可以使用pd.concat首先将列中的所有值设置为一 然后我们像这样合并表:

df3 = pd.concat([df2.id1, df2.id2]).reset_index()
df1 = df2.merge(df3, how="left", left_on = df1.ID, right_on = df3[0])
df1 = df1.iloc[:, :2]
df1 = df1.rename(columns={"key_0": "ID"})

虽然这不是世界上最漂亮的代码,但它确实有效

输出:

    ID      X
0   77      AAAAA_XX
1   4859    BBBBB_XX
2   LSP     CCCC_YY

相关问题 更多 >