Skip to main content
 首页 » 编程设计

python之Pandas 多列交集

2025年05月04日14lonelyxmas

我有一个数据框如下:

data={'NAME':['JOHN','MARY','CHARLIE'], 
  'A':[[1,2,3],[2,3,4],[3,4,5]], 
  'B':[[2,3,4],[3,4,5],[4,5,6]], 
    'C':[[2,4],[3,4],[6,7]]  } 
df=pd.DataFrame(data) 
df=df[['NAME','A','B','C']] 
NAME          A          B            C 
0   JOHN    [1, 2, 3]   [2, 3, 4]   [2, 4] 
1   MARY    [2, 3, 4]   [3, 4, 5]   [3, 4] 
2   CHARLIE [3, 4, 5]   [4, 5, 6]   [6, 7] 

我需要所有 A、B、C 列的交集。

我尝试了以下代码但没有成功:

df['D']=list(set(df['A'])&set(df['B'])&set(df['C'])) 

需要的输出如下:

    NAME            A         B         C       D 
0   JOHN    [1, 2, 3]   [2, 3, 4]   [2, 4]  [2] 
1   MARY    [2, 3, 4]   [3, 4, 5]   [3, 4]  [3, 4] 
2   CHARLIE [3, 4, 5]   [4, 5, 6]   [6, 7]  [] 

请您参考如下方法:

使用答案 here ,将它逐行应用于数据框:

df[['A', 'B', 'C']].apply( 
    lambda row: list(set.intersection(*[set(row[col]) for col in row.index])),  
    axis=1 
) 

请注意,按行应用函数时,行的索引值是原始数据帧的列。