连接两个没有相同键但具有匹配信息的列的数据框

时间:2020-09-22 08:38:46

标签: python-3.x dataframe merge key

我想从其他两个(通用名称字段不具有公用密钥)(df1和df2)创建新的数据框df3。

df1:

key1    start_df2   end_df1   name                                                                                              
info1    0          101       paul       
info2    640        700       paul        
info3    700        801       pierre  

   
     

df2:

key2 name              start_df2   end_df2                                                                                              
0    paul               635         962    
1    pierre             941         1318    
2    jacques            102         587       

在以下条件下的预期结果:如果start_df1> start_df2&end_df1

df3

key? name             start_df2   end_df2 start_df1  end_df1 key1                                                                                             
?    paul             635         962     640        700     info2  
?    paul             635         962     700        801     info3 
?    pierre           941         1318    NA         NA          NA 

....

目标是创建df3(合并吗?),但是如果没有df1和df2之间的公共键列,我将无法创建。

所以我首先尝试.copy:

df3 = df2[['contig', 'start_contig', 'end_contig']].copy()

但是后来我无法从df1中获取信息。

此外,创建第三个表很耗资源,可能会有更快的方法。

我使用3个嵌套循环尝试了此代码,但确实花费了太多时间:

nbExpected = 0
        for k, v in df2['name'].items() :
            for row in df1.groupby(['name']):
                # print(type(row))
                # print(row[1].index)
                for var in enumerate(row[1].index):
                    # print(var[1])
                    # print(df1.loc[var[1], 'start_df1'])
                    nbExpected += len(df1[(df2['name'] == v) \
                        & (df1.loc[var[1], 'start_df1'] > (df2.loc[k,'start_df2'])) \
                        & (df1.loc[var[1], 'end_df1'] < (df2.loc[k,'end_df2']))
                            ] )
        print('nbExpected', nbExpected)

谢谢。

0 个答案:

没有答案