简体   繁体   English

使用 pandas 合并两个数据帧

[英]Merge two dataframes using pandas

I have two dataframes我有两个数据框

df1:

Person    Value
Jack        6
Jill        9
Sam         4
Tony        3


df2:

Home    Away
Jill    Sam
Tony    Jack

I wish to make a 3rd dataframe which grabs the number in the Value column from df1 and matches them to the names in df2我希望制作第三个 dataframe ,它从 df1 获取 Value 列中的数字并将它们与 df2 中的名称匹配

Goal output:目标 output:

df3:

Home    Away    Value1    Value2
Jill    Sam       9         4
Tony    Jack      3         6    

Is there a simple merge function I can perform on this?我可以对此执行简单的合并 function 吗?

Thanks谢谢

Use Series.map for both columns:对两列使用Series.map

s = df1.set_index('Person')['Value']

df2['Value1'] = df2['Home'].map(s)
df2['Value2'] = df2['Away'].map(s)

Or use DataFrame.assign for new DataFrame :或使用DataFrame.assign为新的DataFrame

s = df1.set_index('Person')['Value']
df3 = df2.assign(Value1 = df2['Home'].map(s),
                 Value2 = df2['Away'].map(s))
print (df3)
   Home  Away  Value1  Value2
0  Jill   Sam       9       4
1  Tony  Jack       3       6

Solution with double DataFrame.merge and rename columns:DataFrame.mergerename列的解决方案:

df3 = (df2.merge(df1.rename(columns={'Person':'Home','Value':'Value1'}), how='left')
          .merge(df1.rename(columns={'Person':'Away','Value':'Value2'}), how='left'))
print (df3)
   Home  Away  Value1  Value2
0  Jill   Sam       9       4
1  Tony  Jack       3       6

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM