基于内连接拼接字符串:DataFrame合并拼接的更优实现方法问询
更简便的内连接+字符串拼接实现方式
嘿,这个需求其实挺常见的,确实有比“先内连接再单独拼接”更简洁的写法!咱先假设你的两个DataFrame分别叫df1和df2,给你两种实用思路:
方法1:Merge+赋值一步到位
这是最直观的简化写法,把连接和拼接整合到一行代码里,可读性拉满:
import pandas as pd # 一步完成内连接+字符串拼接 result = pd.merge( df1, df2, on=['id', 'date'], suffixes=('_df1', '_df2') ).assign( combined_str=lambda x: x['str_df1'] + x['str_df2'] )
如果你的str列可能存在缺失值,记得用fillna('')避免拼接出NaN:
result = pd.merge( df1, df2, on=['id', 'date'], suffixes=('_df1', '_df2') ).assign( combined_str=lambda x: x['str_df1'].fillna('') + x['str_df2'].fillna('') )
方法2:Concat+GroupBy聚合(高效紧凑)
这种方法不需要显式做连接,通过合并两个数据集后按id+date分组,直接聚合拼接字符串,数据量大的时候效率更高:
# 合并两个数据集的核心列 combined = pd.concat([df1[['id', 'date', 'str']], df2[['id', 'date', 'str']]]) # 按id+date分组拼接,同时过滤仅存在于单个数据集的组(等价于内连接) result = combined.groupby(['id', 'date'])['str'].agg( lambda x: ''.join(x) if len(x) == 2 else None ).dropna().reset_index()
同样,处理缺失值的话,在concat前先填充空字符串:
combined = pd.concat([ df1[['id', 'date', 'str']].fillna(''), df2[['id', 'date', 'str']].fillna('') ]) result = combined.groupby(['id', 'date'])['str'].agg(''.join).reset_index() # 过滤仅出现一次的组(保证是内连接结果) result = result[combined.groupby(['id', 'date']).size() == 2].reset_index(drop=True)
两种方法各有优势:方法1逻辑清晰,适合新手快速上手;方法2代码更紧凑,大数据场景下性能更优,你可以根据自己的数据集大小和习惯选~
内容的提问来源于stack exchange,提问作者N08
相关产品推荐
相关产品推荐

