繁体   English   中英

与熊猫合并创建新列?

[英]Merge with pandas creating new columns?

我有一个数据框,该数据框具有对另一个数据框的多个引用(就像它在SQL中是外键一样),因此,我想将它们合并,以便可以将第一个数据框中的所有信息都包含在其中。 类似于以下内容,请记住在python中使用熊猫。

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'

合并选项(由于我目前正在使用它)没有给我任何结果。 关于如何执行此操作的任何想法?

提前致谢

这将起作用并生成您要查找的表:

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

暂无
暂无

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

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