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

如何将列表内多个DataFrame与主DataFrame批量左连接替代链式merge

实现方案

你可以通过循环迭代或者functools.reduce两种方式实现可扩展的批量左连接,无需手动写链式合并代码。

方案1:循环迭代(易理解,适合需要自定义中间处理的场景)

首先提前整理好每个子DataFrame对应的主表连接键列表,key_list的顺序和df_list的子表顺序一一对应:

import pandas as pd

# 准备连接键列表,每个元素对应df_list同位置子表的主表连接键
key_list = ["key_0", "key_1", "key_2"]

# 初始化结果为主表
result = df_main.copy()

# 迭代批量合并
for df, join_key in zip(df_list, key_list):
    # 若子表的键列名固定为`Key`,和主表键名不一致,可替换为如下写法:
    # result = result.merge(df, left_on=join_key, right_on="Key", how="left")
    result = result.merge(df, on=join_key, how="left")

方案2:reduce归并(代码更简洁)

用functools.reduce实现归并逻辑,一行代码即可完成批量合并:

import pandas as pd
from functools import reduce

key_list = ["key_0", "key_1", "key_2"]

# 归并合并
result = reduce(
    lambda left, right: left.merge(right[0], on=right[1], how="left"),
    zip(df_list, key_list),
    df_main
)

注意优化点

如果多个子表的Value列重名,合并后会自动加_x/_y后缀区分,你可以在合并前提前给每个子表的Value重命名避免歧义:

# 合并前批量重命名子表的Value列
for idx, df in enumerate(df_list):
    df.rename(columns={"Value": f"Value_{idx}"}, inplace=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 05:24:08