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
相关产品推荐
相关产品推荐

