如何根据两个列值将我在 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'))
我有两个数据框,我正在努力根据 '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'))