Python:如何基于从一侧到另一侧的两列合并两个数据框?

时间:2018-09-06 18:39:29

标签: python pandas

我有两个数据帧df1df2

df1   
      Name1  Name2
0     John   Jack
1     Eva    Tom
2     Eva    Sara
3     Carl   Sam
4     Sam    Erin

df2   Name    Money
0     John     40
1     Eva      20
2     Jack     10
3     Tom      80
4     Sara     34
5     Carl     77
6     Erin     12 

我想合并两个数据框并得到:

df1   
      Name1  Name2   Money1   Money2
0     John   Jack     40       10
1     Eva    Tom      20       80
2     Eva    Sara     20       34
3     Carl   Sam      77       NaN
4     Sam    Erin     NaN      12

这是我正在做的事情,但我认为这不是最好的解决方案:

df1 = pd.merge(df1, df2, right_on='Name1', left_on='Name')
df1.columns = ['Name1', 'Name2', 'Money1']
df1 = pd.merge(df1, df2, right_on='Name2', left_on='Name')
df1.columns = ['Name1', 'Name2', 'Money1', 'Money2']

2 个答案:

答案 0 :(得分:2)

将地图与Apply结合使用

df1[['Money1','Money2']]=df1.apply(lambda x : x.map(df2.set_index('Name').Money))
df1
Out[293]: 
  Name1 Name2  Money1  Money2
0  John  Jack    40.0    10.0
1   Eva   Tom    20.0    80.0
2   Eva  Sara    20.0    34.0
3  Carl   Sam    77.0     NaN
4   Sam  Erin     NaN    12.0

答案 1 :(得分:1)

您可以使用6' 1" ,而无需6' 1"

index matching

apply

实际上是单线的,但很大。另一种选择是显式编写以下行:


assign

df = df.set_index('Name1').assign(Money_1=df2.set_index('Name').Money).reset_index().set_index('Name2').assign(Money_2=df2.set_index('Name').Money).reset_index()

两个输出

loc