如何优雅实现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
相关产品推荐
相关产品推荐

