pandas 中单列所有行的交集

Intersection of all rows of a single column in pandas

我有一个数据框,其中有一列包含列表值作为行。我想有效地找到列的所有行的交集。现在我已经实现的代码遍历数据框。寻找一种不使用循环的方法...... 下面给出了一个示例 df。我正在尝试查找标记列的交集

query                 tokens
ABC                   [A,B,C]
CDE                   [C,D,E]   
FGH                   [A,E,C]

我的预期输出是 [C]

我的 df 有超过 20k 行

您可以使用 numpy.intersect1dfunctools.reduce 来做到这一点。

from functools import reduce
import pandas as pd
import numpy as np

In [48]: df = pd.DataFrame(['abc', 'cde', 'aec'], columns=['tokens_'])          

In [49]: df['tokens'] = df.tokens_.apply(list)                                  

In [50]: df.drop(['tokens_'], inplace=True, axis='columns')                     

In [51]: df                                                                     
Out[51]: 
      tokens
0  [a, b, c]
1  [c, d, e]
2  [a, e, c]

In [52]: reduce(np.intersect1d, df['tokens'])                                   
Out[52]: array(['c'], dtype='<U1')