我有一个数据框,它有多个对另一个的引用(好像它是SQL中的外键),因此,我想合并它们,我可以从第一个数据帧中获取所有信息。像下面这样的东西,记得在python中使用pandas。
df1: df2:
pk fk1 fk2 pk att1 att2
0: 0001 2 3 1 'aa' 'bb'
1: 0002 2 - 2 'ab' 'ba'
2: 0003 1 3 3 'ab' 'bb'
我假装合并的是在一个表中,如:
df3:
pk fk1 fk2 att1_1 att1_2 att2_1 a2t2_2
0: 0001 2 3 'ab' 'ba' 'ab' 'bb'
1: 0002 2 - 'ab' 'ba' - -
2: 0003 1 3 'aa' 'bb' 'ab' 'bb'
合并选项(因为我现在正在使用它)并没有给我任何结果。关于如何做到这一点的任何想法?
提前致谢
答案 0 :(得分:0)
这将起作用并生成您正在寻找的表:
df3=df1.join(df2.set_index('pk'),on='fk1').join(df2.set_index('pk'),on='fk2',lsuffix="_1",rsuffix="_2").fillna('-')
给出:
pk fk1 fk2 att1_1 att2_1 att1_2 att2_2
0 0001 2 3 ab ba ab bb
1 0002 2 - ab ba - -
2 0003 1 3 aa bb ab bb
这里更容易阅读,只在通过连接添加的列上填写na:
#set the index to pk on df2 for the join to work
df2.set_index('pk',inplace=True)
#join fk1 of df1 to index of df2, then again for fk2
#since there is column overlap you can assign your desired suffixes
df3=df1.join(df2,on='fk1').join(df2,on='fk2',lsuffix="_1",rsuffix="_2")
#fill na in the last 4 columns with '-' since they could not join
df3[df3.columns[-4:]]=df3[df3.columns[-4:]].fillna('-')