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

如何优雅实现DataFrame单列列表值的两两集合交集运算,无需循环

实现方案

核心思路是将列表转为集合后通过numpy广播机制完成两两配对求交集,全程无手动编写的显式循环:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    "A": [[1, 3, 4], [43, 1, 42], [50, 3]]
})

# 1. 将列表列转为集合序列,方便后续求交集
set_series = df["A"].apply(set)

# 2. 用numpy广播生成所有两两索引配对
row_idx, col_idx = np.meshgrid(set_series.index, set_series.index, indexing="ij")

# 3. 向量化计算所有配对的交集并转为列表,最终构造结果DataFrame
result = pd.DataFrame(
    np.vectorize(lambda x, y: list(x & y))(set_series[row_idx], set_series[col_idx]),
    index=set_series.index,
    columns=set_series.index
)

补充说明

你给出的示例输出中第0行第0列的[1, 2, 3]属于笔误,按照输入数据计算得到的对应结果应为[1, 3, 4],其余位置结果和你给出的示例完全一致。

np.vectorize仅为适配向量化调用的语法糖,不需要手动编写嵌套循环遍历所有两两组合,符合无显式循环的要求,且底层运算效率远高于Python级别的手动循环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 10:57:03