我有一个数据框,该数据框的一列包含列表值作为行。我想高效地找到列的所有行的交集。现在,我实现的代码在数据帧上进行迭代。寻找一种不用循环的方法...以下是样本df。我正在尝试找到令牌的交集列
query tokens
ABC [A,B,C]
CDE [C,D,E]
FGH [A,E,C]
我的预期输出是[C]
我的df有超过2万行
您可以使用numpy.intersect1d
和functools.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')