You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于内连接拼接字符串: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:10:02