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

如何提取多个DataFrame的公共行并生成新DataFrame

多DataFrame提取全量共有行实现方案

要获取多个输入DataFrame共有的完整行,有两种经过验证的可行实现,根据你的数据规模选择即可:


方法1:链式内连接(适配性最强,推荐日常使用)

pandas的内连接逻辑默认只保留所有关联表中匹配键完全一致的行,只要把所有列设为匹配键,做链式内连接就能直接得到所有表的共有行,对数据类型没有特殊要求。

import pandas as pd
from functools import reduce

# 所有待处理的DataFrame统一放入列表
df_list = [df1, df2, df3]  # 按你实际的变量名替换、增减

# 链式做内连接,默认按所有同名列匹配
common_df = reduce(lambda left, right: pd.merge(left, right, how="inner"), df_list)

如果只需要按指定列判断行是否共有(比如仅按ID列匹配),给merge加on=["列名1", "列名2"]参数指定匹配字段即可。


方法2:行值交集计算(大表性能更优)

如果单表数据量在十万级以上,链式merge的性能会下降,可以把每个DataFrame的行转成可哈希元组,直接取集合交集,再转换回DataFrame,速度会快很多:

from functools import reduce

df_list = [df1, df2, df3]
# 把每个DataFrame的行转成元组集合
row_set_list = [set(df.itertuples(index=False, name=None)) for df in df_list]
# 计算所有行集合的交集
common_rows = list(reduce(lambda x, y: x & y, row_set_list))
# 转换回和原表列结构一致的DataFrame
common_df = pd.DataFrame(common_rows, columns=df_list[0].columns)

注意:这个方法要求所有行的字段值都是可哈希类型(数值、字符串、时间戳都支持,列表、字典等可变类型不支持),如果有不可哈希字段请用方法1。


两种方法输出的结果完全一致,都是仅保留在所有输入DataFrame中完整存在的行,和你预期的输出效果匹配。

内容的提问来源于stack exchange,提问作者eleni.ps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:18:18