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

Pandas中基于连接列字符串片段实现DataFrame内连接的方法

基于JoinColumn中间字符串的Pandas内连接方案

这里有个不用拆分列就能实现需求的方法,核心是利用正则表达式提取两个表JoinColumn里的中间匹配键,临时生成匹配列后完成连接,最后清理临时列即可:

完整代码示例

import pandas as pd

# 定义原始DataFrame
Table1= pd.DataFrame({'JoinColumn' : pd.Series(['1_Abc_0','2_Cde_1','3_Efg_0','5_xyz_1'], index=['a', 'b', 'c','d']), 
                      'Col2' : pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']),
                      'Col3' : pd.Series([1, 2., 3., 4.], index=['a', 'b', 'c', 'd'])})
Table2= pd.DataFrame({'JoinColumn' : pd.Series(['2_Abc_1','2_Cde_0','6_Efg_0','9_xyz_2'], index=['a', 'b', 'c','d']), 
                      'Col2' : pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd']),
                      'Col3' : pd.Series([1, 2., 3., 4.], index=['a', 'b', 'c', 'd'])})

# 执行内连接:提取中间匹配键 -> 连接 -> 清理临时列
merged_result = (Table1.assign(match_key=Table1['JoinColumn'].str.extract(r'_(\w+)_', expand=False))
                 .merge(Table2.assign(match_key=Table2['JoinColumn'].str.extract(r'_(\w+)_', expand=False)),
                       on='match_key', how='inner')
                 .drop('match_key', axis=1))

print(merged_result)

代码说明

  • 提取中间匹配键:用str.extract(r'_(\w+)_', expand=False)从JoinColumn中捕获被下划线包裹的中间字符串(比如1_Abc_0里的Abc)。如果你的中间字符串包含特殊符号(非字母数字下划线),可以把正则改成r'_([^_]+)_',这样能匹配任意非下划线的字符。
  • 临时列连接:通过assign()临时添加匹配键列,避免修改原始DataFrame,然后基于这个临时列执行内连接。
  • 清理临时列:连接完成后用drop()删除临时的match_key列,得到干净的结果。

输出结果

执行后会得到四行匹配结果,每个中间字符串(Abc/Cde/Efg/xyz)各对应一行,完全符合内连接的预期。

内容的提问来源于stack exchange,提问作者Shivpe_R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:52:09