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

新手上路,请多包涵

希望你能帮助我。我是 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'])]

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

原文由 Tikku 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 376
2 个回答

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

为了使事情变得简单,您可以使用 np.intersect1d

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


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

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

原文由 cs95 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

['dog']


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

 from functools import reduce

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

['dog']

原文由 piRSquared 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题