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

如何使用pd.merge基于公共user列合并3个及以上DataFrame

报错原因

pd.merge() 单次仅支持合并2个DataFrame,传入3个及以上DataFrame时,第三个及之后的位置参数会被误识别为合并规则配置项(比如连接方式、后缀配置等),pandas内部尝试判断传入的DataFrame作为布尔值的有效性时,就会抛出你看到的真值判断歧义报错。

解决方法

方法1:链式调用merge(适合少量DataFrame场景)

每次调用merge合并两个结果,连续调用即可完成多表合并,和你之前双表合并的逻辑完全一致:

import pandas as pd

result = pd.merge(
    df1[['user', 'books']], 
    df2[['user', 'animal']], 
    on='user'
).merge(
    df3[['user', 'place']], 
    on='user'
)

运行输出结果:

user  books  animal  place
0    alex      2       0      3
1  andrew     10       0      4
2  kelvin     15       2      5
3    mary      5       1      3

方法2:reduce批量合并(适合大量DataFrame场景)

如果需要合并的表数量较多,链式调用写起来冗余,可以借助functools.reduce自动迭代完成所有表的合并,不需要重复写merge语句:

import pandas as pd
from functools import reduce

# 将所有需要合并的DataFrame存入列表
df_to_merge = [
    df1[['user', 'books']],
    df2[['user', 'animal']],
    df3[['user', 'place']]
]

# 自动依次取列表内两个表做合并,再将结果和下一个表继续合并
result = reduce(lambda left_df, right_df: pd.merge(left_df, right_df, on='user'), df_to_merge)

如果需要调整连接逻辑,只需要在pd.merge()中增加how参数即可:how='left'为左连接、how='outer'为全外连接,默认how='inner'取所有表共有的user值,和你双表合并的默认逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:54:28