将列值与行值匹配并写入新列

扎眼的阳光 python 178

原文标题Matching the column values to the row values and write in the new column

我的第一个数据框如下所示:

df1:

ID      Name    Result
ABC1    John     A
ABC1    Mac      B
ABC1    Kat      C
DEF1    John     D
DEF1    Mac      E
DEF1    Kat      F
XYZ1    John     G
XYZ1    Mac      H
XYZ1    Kat      I

df2:

ID      John    Mac    Kat
ABC1    22      33     11
DEF1    10      12     2
XYZ2    11      12     36

结果 df3:(它应该将 df1 的 ID 和名称与 df2 的列的 ID 和名称(John、Mac 和 Kat)匹配,然后给出它们各自的值。

ID      Name    Result  Value
ABC1    John    A       22
ABC1    Mac     B       33
ABC1    Kat     C       11
DEF1    John    D       10
DEF1    Mac     E       12
DEF1    Kat     F        2
XYZ1    John    G        0
XYZ1    Mac     H        0
XYZ1    Kat     I        0

有多个问题:

使用列标题查找匹配值并在该行的匹配列中获取值

将行值替换为将行值与列名匹配

但它只适用于一个数据框,所以我想合并数据框,但似乎不起作用。

原文链接:https://stackoverflow.com//questions/71477739/matching-the-column-values-to-the-row-values-and-write-in-the-new-column

回复

我来回复
  • jezrael的头像
    jezrael 评论

    DataFrame.joinDataFrame.stack

    df = (df1.join(df2.set_index('ID').stack().rename('Value'), on=['ID','Name'])
             .fillna({'Value':0}))
    

    DataFrame.mergeDataFrame.melt

    df = (df1.merge(df2.melt('ID', var_name='Name', value_name='Value'), 
                    on=['ID','Name'], how='left')
             .fillna({'Value':0}))
    

    print (df)
         ID  Name Result  Value
    0  ABC1  John      A   22.0
    1  ABC1   Mac      B   33.0
    2  ABC1   Kat      C   11.0
    3  DEF1  John      D   10.0
    4  DEF1   Mac      E   12.0
    5  DEF1   Kat      F    2.0
    6  XYZ1  John      G    0.0
    7  XYZ1   Mac      H    0.0
    8  XYZ1   Kat      I    0.0
    
    2年前 0条评论