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

迭代计算多集合累积交集 为DataFrame新增对应列的实现方法

可行实现方案

首先确保DataFrame的Letter列存储为Python原生set类型,以下是两种常用的实现方案:

方案1:用functools.accumulate实现(性能最优)

该方案底层为优化后的迭代逻辑,无pandas apply的额外开销,适合大小数据集。

import pandas as pd
from functools import accumulate

# 构造示例数据
df = pd.DataFrame({
    'Group': [1,2,3,4,5],
    'Letter': [
        {'a','b','c','d','e'},
        {'b','c','d','e','f'},
        {'b','c','d','f','g'},
        {'a','b','c','f','g'},
        {'a','c','d','e','h'}
    ]
})

# 累积计算所有前置集合的交集
cum_intersect = accumulate(df['Letter'], lambda pre, cur: pre & cur)
# 构造结果列:第1行设为None,后续行对应累积交集的结果
df['Intersection'] = [None] + list(cum_intersect)[1:]

方案2:用pandas expanding窗口实现(写法更简洁)

该方案用pandas原生的滑动扩展窗口实现,适合小数据量场景:

df['Intersection'] = df['Letter'].expanding().apply(
    lambda x: set.intersection(*x) if len(x) >= 2 else None
)

补充说明

  • 若需要固定顺序的输出结果,可以在计算交集后调用sorted()转成有序列表,例如将方案1的lambda改为lambda pre, cur: sorted(pre & cur)
  • 集合为空交集时会返回空set,可根据需求自行调整为空值或其他默认值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:04