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

Pandas自定义多列匹配连接函数开发:添加连接溯源列

自定义Pandas多列匹配连接函数

需求说明

现有两个Pandas DataFrame:

  • df1 包含列 A1
  • df2 包含列 B2、C3、D3

需要实现自定义函数 mutiple_joins,传入参数包括两个DataFrame、左连接列列表lefton、右表匹配列列表right_one、连接标识join_id,完成以下功能:

  1. 将df1的指定左列与df2中任意指定右列匹配连接
  2. 新增一列(列名为join_id: {join_id}),记录用于连接的原始匹配值

示例数据

# df1数据
df1 = pd.DataFrame({'A1': [1, 2, 3]})

# df2数据
df2 = pd.DataFrame({'B2': [6, 7, 3], 'C3': [1, 4, 9], 'D3': [10, 2, 11]})

数据结构直观展示:

df1 (A1)df2 (B2, C3, D3)
16, 1, 10
27, 4, 2
33, 9, 11

函数实现

import pandas as pd

def mutiple_joins(df1, df2, lefton, right_one, join_id):
    # 提取左连接列名
    left_col = lefton[0]
    # 存储每个右列连接后的临时结果
    join_results = []
    
    # 遍历所有右表匹配列,依次执行左连接
    for right_col in right_one:
        temp_df = pd.merge(df1, df2, left_on=left_col, right_on=right_col, how='left')
        # 标记匹配的原始值
        temp_df['_match_value'] = temp_df[left_col]
        join_results.append(temp_df)
    
    # 合并所有连接结果,去重保留每个左列值的首个匹配项
    combined_df = pd.concat(join_results).drop_duplicates(subset=left_col, keep='first')
    # 重命名匹配值列为指定格式
    join_col_name = f'join_id: {join_id}'
    combined_df.rename(columns={'_match_value': join_col_name}, inplace=True)
    
    # 调整列顺序:左连接列 → df2原列 → 新增匹配列
    final_columns = lefton + list(df2.columns) + [join_col_name]
    return combined_df[final_columns]

测试与结果

调用函数:

df3 = mutiple_joins(df1, df2, lefton=['A1'], right_one=['B2','C3','D3'], join_id='#12')
print(df3)

输出结果:

A1  B2  C3  D3 join_id: #12
0   1   6   1  10            1
1   2   7   4   2            2
2   3   3   9  11            3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:48:32