【问题标题】:Intersection of all rows of a single column in pandas熊猫中单列的所有行的交集
【发布时间】:2020-04-24 17:57:12
【问题描述】:

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

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

我的预期输出是 [C]

我的 df 有超过 20k 行

【问题讨论】:

  • 请举例说明
  • 确保问题已更新
  • df['query'].eq(df['tokens'].apply(','.join))
  • @ansev 相交后,我认为输出将是一个列表。我尝试了您的代码,并为每一行给出了 True 或 False,而不是常见项目的列表/集合

标签: python-3.x pandas dataframe intersection


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2020-02-11
    • 2021-06-19
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多