pandas 根据匹配的列值和索引重复 ID

pandas repeat ids based on matching column value and index

我有两个数据框,如下所示

row_id,var_name,score
1,revenue,10
1,cnt_days,5
1,age,15
2,revenue,11
2,cnt_days,3
2,age,25

df1 = pd.read_clipboard(sep=',')

unique_key,status,country,marital_status     
 123,passed,UK,Single
 456,failed,USA,Married
 789,passed,KOREA,Single

df2 = pd.read_clipboard(sep=',')

我想执行以下操作

a) 根据df1['row_id']df2.index匹配df1df2

b) 对于匹配记录,将 unique_key 附加到 df1

所以,我尝试了以下

pd.concat([df1, df2[['unique_key']].reset_index(drop=True)], axis=1)

但以上内容不适用于重复 row_ids。它只匹配第一次出现的 row_ids.

如何在大数据数据帧中重复出现 row_ids?

我希望我的输出如下所示

因为可以通过 df2 中的索引匹配 Series - df2['unique_key']:

使用 Series.map
df1['unique_key'] = df1['row_id'].map(df2['unique_key'])
print (df1)
   row_id  var_name  score  unique_key
0       1   revenue     10         456
1       1  cnt_days      5         456
2       1       age     15         456
3       2   revenue     11         789
4       2  cnt_days      3         789
5       2       age     25         789

或仅使用参数 left_onright_index:

与列 unique_key 左联接
df = df1.merge(df2['unique_key'], left_on='row_id', right_index=True, how='left')
print (df)
   row_id  var_name  score  unique_key
0       1   revenue     10         456
1       1  cnt_days      5         456
2       1       age     15         456
3       2   revenue     11         789
4       2  cnt_days      3         789
5       2       age     25         789
df1['unique_key'] = df1.merge(df2, right_index=True, left_on='row_id')['unique_key']
print(df1)

   row_id  var_name  score  unique_key
0       1   revenue     10         456
1       1  cnt_days      5         456
2       1       age     15         456
3       2   revenue     11         789
4       2  cnt_days      3         789
5       2       age     25         789