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

如何找出3个DataFrame中出现2次及以上的'num'值并标记次数?

解决方法:用合并统计替代内连接,覆盖「至少2个DataFrame出现」的场景

嘿,我完全懂你的困扰——内连接确实只能揪出三个DataFrame都共有的num,没法覆盖仅在两个里出现的情况。其实换个思路,咱们先把所有数据整合起来,统计每个num在多少个不同的DataFrame里出现,再筛选符合条件的就行,这才是最高效的方案。

方法一:Pandas 合并+分组统计(推荐,适配大数据量)

这个方法能准确统计每个num跨DataFrame的出现次数,还能避免同一个DataFrame内重复num的干扰:

import pandas as pd

# 给每个DataFrame标记来源(方便后续统计不同来源的数量)
df1['from_df'] = 'df1'
df2['from_df'] = 'df2'
df3['from_df'] = 'df3'

# 合并三个DataFrame的`num`和来源列
combined_df = pd.concat([df1[['num', 'from_df']], df2[['num', 'from_df']], df3[['num', 'from_df']]])

# 按`num`分组,统计每个num在多少个不同的DataFrame里出现(去重统计来源)
num_counts = combined_df.groupby('num')['from_df'].nunique()

# 筛选出至少在2个DataFrame中出现的num,整理成最终结果
final_result = num_counts[num_counts >= 2].reset_index()
final_result.columns = ['num', 'occurrence_count']

为什么这个方法好用?

  • 不管单个DataFrame里的num重复多少次,都只会按「不同DataFrame」计数,结果更准确
  • 效率高,处理十万级以上的数据也不会卡顿
  • 扩展性强:后续再加DataFrame,只需要重复添加来源标记、合并两步就行

方法二:集合运算(适合小数据量,逻辑直观)

如果你的数据量不大,用集合的交集/并集运算会更直观:

# 先提取每个DataFrame的唯一num集合
set_df1 = set(df1['num'].unique())
set_df2 = set(df2['num'].unique())
set_df3 = set(df3['num'].unique())

# 找出至少在两个集合里出现的num:两两交集的并集
target_nums = (set_df1 & set_df2) | (set_df1 & set_df3) | (set_df2 & set_df3)

# 统计每个num的出现次数
final_result = pd.DataFrame([
    {'num': num, 'occurrence_count': sum(1 for s in [set_df1, set_df2, set_df3] if num in s)}
    for num in target_nums
])

为什么内连接不行?

内连接(pd.merge多次)本质是取三个DataFrame的交集,只有同时存在于三个df里的num才会被保留,自然会漏掉仅在两个df里出现的情况。而我们需要的是「两两交集的并集」,刚好是上面两种方法能覆盖的范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:02:13