繁体   English   中英

通过搜索和匹配完全相同的字符串来连接两个数据框

[英]Join two data frames by searching & matching exactly same strings

我有两个 python 数据帧:其中一个有一个列有一个行'AC-2'另一个数据帧包括有一个字符串行'AC-20,AC8,AC-15'的列

str_match = "({})".format("|".join(df1['column_first_dataframe']))
df2.merge(df2,how='left',left_on=df1['column_first_dataframe'].str.extract(str_match)[0], right_on="column_second_dataframe")

第一个数据集:

Column1 Column2
AC-2         2       
AC-20        1       
AC-15        3       
AC-1         2       
AC-5         5      
     

第二个数据集:

Column1        
AC-2,AC-5,AC-30      
AC-20,AC-30,AC11

我发现:

Column1 Column2             
AC-2       AC-20,AC-30,AC11       
AC-2       AC-2,AC-5,AC-30   
AC-20      AC-20,AC-30,AC11        
AC-15        null      
AC-1         null      
AC-5        AC-2,AC-5,AC-30 

上面有数据集 1 的 AC-2 和数据集 2 的字符串中的 AC-20 之间的匹配,但它们在我的数据集中是不同的东西。 我想要的 output:

Column1 Column2             
AC-2       AC-2,AC-5,AC-30      
AC-20      AC-20,AC-30,AC11        
AC-15        null      
AC-1         null      
AC-5       AC-2,AC-5,AC-30

我试图通过搜索和匹配来合并数据帧,但我的代码将 AC-2 合并到 AC-20。 我不想那样做。 是否有任何搜索和匹配方法可以完全合并我想要的数据框。 我不想合并 AC-20 和 AC-2。 它应该将 AC-2 和 AC-2 与完全相同的东西合并。

感谢您的贡献!

一种简单的方法是split和分解explode的 Column2 以获得每个完整单词的一行并执行简单的左merge

(df1
 .merge(df2.assign(group=df2['Column1'].str.split(','))
           .rename(columns={'Column1': 'Column3'})
           .explode('group'),
        left_on='Column1', right_on='group', how='left'
       )
 .drop(columns='group')
)

output:

  Column1  Column2           Column3
0    AC-2        2   AC-2,AC-5,AC-30
1   AC-20        1  AC-20,AC-30,AC11
2   AC-15        3               NaN
3    AC-1        2               NaN
4    AC-5        5   AC-2,AC-5,AC-30
选择

注意。 我正在生产稍有不同的 output 以保留所有列。 如果你真的想要你的 output,只需在 df1 中删除“Column2”,然后在 df2 中将“Column1”重命名为“Column2”

(df1
 .drop(columns='Column2')
 .merge(df2.rename(columns={'Column1': 'Column2'})
           .assign(Column1=df2['Column1'].str.split(','))
           .explode('Column1'),
        on='Column1', how='left'
       )
)

output:

  Column1           Column2
0    AC-2   AC-2,AC-5,AC-30
1   AC-20  AC-20,AC-30,AC11
2   AC-15               NaN
3    AC-1               NaN
4    AC-5   AC-2,AC-5,AC-30

暂无
暂无

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

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