Pandas自定义多列匹配连接函数开发:添加连接溯源列
自定义Pandas多列匹配连接函数
需求说明
现有两个Pandas DataFrame:
df1包含列A1df2包含列B2、C3、D3
需要实现自定义函数 mutiple_joins,传入参数包括两个DataFrame、左连接列列表lefton、右表匹配列列表right_one、连接标识join_id,完成以下功能:
- 将
df1的指定左列与df2中任意指定右列匹配连接 - 新增一列(列名为
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) |
|---|---|
| 1 | 6, 1, 10 |
| 2 | 7, 4, 2 |
| 3 | 3, 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
相关产品推荐
相关产品推荐

