熊猫中一列的所有行的交集

问题描述 投票:-1回答:1

我有一个数据框,该数据框的一列包含列表值作为行。我想高效地找到列的所有行的交集。现在,我实现的代码在数据帧上进行迭代。寻找一种不用循环的方法...以下是样本df。我正在尝试找到令牌的交集列

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

我的预期输出是[C]

我的df有超过2万行

python-3.x pandas dataframe intersection
1个回答
0
投票

您可以使用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')

© www.soinside.com 2019 - 2024. All rights reserved.