首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过搜索和匹配完全相同的字符串连接两个数据帧

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

Stack Overflow用户
提问于 2022-01-05 18:45:38
回答 1查看 330关注 0票数 1

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

代码语言:javascript
复制
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")

第一个数据集:

代码语言:javascript
复制
Column1 Column2
AC-2         2       
AC-20        1       
AC-15        3       
AC-1         2       
AC-5         5      

第二个数据集:

代码语言:javascript
复制
Column1        
AC-2,AC-5,AC-30      
AC-20,AC-30,AC11

我发现:

代码语言:javascript
复制
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 

上面是dataset1的AC-2和dataset 2的AC-20之间的匹配,但它们在我的数据集中是不同的。我想要的输出:

代码语言:javascript
复制
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和完全相同的东西合并。

谢谢你的贡献!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 07:29:52

一种简单的方法是splitexplode ( Column2 of df2 )为整字获取一行,并执行简单的左merge

代码语言:javascript
复制
(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')
)

产出:

代码语言:javascript
复制
  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

替代方案

注意:我正在生产上面一个稍微不同的输出,以保留所有的列。如果真的想要输出,只需将"Column2“放在df1中,将"Column1”重命名为df2中的"Column2“即可

代码语言:javascript
复制
(df1
 .drop(columns='Column2')
 .merge(df2.rename(columns={'Column1': 'Column2'})
           .assign(Column1=df2['Column1'].str.split(','))
           .explode('Column1'),
        on='Column1', how='left'
       )
)

产出:

代码语言:javascript
复制
  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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70598075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档