如何根据两个列值将我在 df1 中创建的唯一 ID 匹配到 df2?

How to match the unique ids that I created in df1 to df2 based on two column values?

我有两个数据框,我正在努力根据 'name' 和 'version' 值将我在 df1 中创建的唯一 ID 匹配到 df2。我需要向 df2 添加一列,我们称它为 ['ID'],其值与 df1 中的唯一 ID 值匹配。条件是 df2 中的 'name' 和 'version' 值必须等于 df1 中的相同 'name' 和 'version' 才能分配正确的 ID 值。 DF2 具有 DF1 的所有元素,但它们是重复的。

df1 = pd.DataFrame(
    {
        'Unique ID': ['111', '222', '333', '444'],
        'Name': ['A', 'A' ,'B','C'],
        'Version': ['1.1', '1.2', '1.0', '1.1'],
        'x': ['...', '...', '...', '...']
    }
)

DF1

   | UNIQUE ID | NAME | VERSION |  X  |
  1|     111   |   A  |     1.1 | ... |
  2|     222   |   A  |     1.2 | ... |
  3|     333   |   B  |     1.0 | ... |
  4|     444   |   C  |     1.1 | ... |
df2 = pd.DataFrame(
    {
        'Name': ['A', 'A', 'A', 'A', 'B'],
        'Version': [ '1.1' ,'1.1', '1.1', '1.2', '1.0'],
        'x': ['...', '...', '...', '...','...'],
        'x': ['...', '...', '...', '...','...'],
    }
)

DF2

    | NAME | VERSION |  X  | X  |
  1 |  A   |  1.1    | ... |... |
  2 |  A   |  1.1    | ... |... | 
  3 |  A   |  1.1    | ... |... |  
  4 |  A   |  1.2    | ... |... |
  5 |  B   |  1.0    | ... |... |

DF2 的期望输出:

DF2

    | NAME | VERSION |   ID    | X  |  X |
  1 |  A   |  1.1    |   111   |... | ...|
  2 |  A   |  1.1    |   111   |... | ...|
  3 |  A   |  1.1    |   111   |... | ...|
  4 |  A   |  1.2    |   222   |... | ...|
  5 |  B   |  1.0    |   333   |... | ...|

尝试的代码:


df2['ID'] = df1[df1['name' + '_' + 'version'].isin(df2['name' + '_' + 'version'])]['Unique ID'].values 

一种有点脏但有效的方法:

df2.merge(df1[['Unique ID','Name','Version']],left_on=['Name','Version'], right_on=['Name','Version'],
suffixes=('_left', '_right'))