迭代计算多集合累积交集 为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
相关产品推荐
相关产品推荐

