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

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

有多个问题:

Use column headers to find matching value and get value in matching column for the row

但它只适用于一个数据帧,所以我想合并数据帧,但似乎没有用。

使用DataFrame.join with DataFrame.stack:

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

DataFrame.merge with DataFrame.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