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
匹配df1
和df2
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_on
和 right_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
我有两个数据框,如下所示
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
匹配df1
和df2
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_on
和 right_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