查找多个数据框列之间的公共元素

Finding common elements between multiple dataframe columns

希望你能帮助我。我是 python 和 pandas 的新手,所以请多多包涵。我正在尝试查找三个数据框之间的通用词,并且我正在使用 Jupiter Notebook。

举个例子:

df1=
A
dog
cat
cow 
duck
snake

df2=
A
pig
snail
bird
dog

df3=
A
eagle
dog 
snail
monkey

所有数据框中只有一列是A,我想找到

  1. 所有列中的公共词
  2. 属于自己专栏的独有词,不常见的词。

示例:

鸭子是df1特有的,蜗牛是df2特有的,猴子是df3特有的。

我正在使用下面的代码,但没有得到我想要的东西,

df1[df1['A'].isin(df2['A']) & (df2['A']) & (df3['A'])]

请让我知道哪里出错了。干杯

您当前方法的问题在于您需要 多个 isin 调用。更糟糕的是,您需要跟踪哪个数据帧最大,然后在 那个 上调用 isin。否则无效。

为方便起见,您可以使用 np.intersect1d:

>>> np.intersect1d(df3.A, np.intersect1d(df1.A, df2.A))
array(['dog'], dtype=object)

使用 functools.reduce + intersect1d 的类似方法:

>>> from functools import reduce # python 3 only
>>> reduce(np.intersect1d, [df1.A, df2.A, df3.A])
array(['dog'], dtype=object)

最简单的方法是使用set交集

list(set(df1.A) & set(df2.A) & set(df3.A))

['dog']

但是,如果您有一长串这些东西,我会使用 functools 中的 reduce。同样的技术也可以用于@cᴏʟᴅsᴘᴇᴇᴅ对np.intersect1d的使用。

from functools import reduce

list(reduce(set.intersection, map(set, [df1.A, df2.A, df3.A])))

['dog']