合并大熊猫创建新列?

时间:2015-07-01 17:12:30

标签: python pandas merge

我有一个数据框,它有多个对另一个的引用(好像它是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'

合并选项(因为我现在正在使用它)并没有给我任何结果。关于如何做到这一点的任何想法?

提前致谢

1 个答案:

答案 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('-')