在多个数据框列之间查找公共元素 [英] Finding common elements between multiple dataframe columns

查看:65
本文介绍了在多个数据框列之间查找公共元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

希望您能帮助我.我是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 解决方案

The problem with your current approach is that you need to chain multiple isin calls. What's worse is that you'd need to keep track of which dataframe is the largest, and you call isin on that one. Otherwise, it doesn't work.

To make things easy, you can use np.intersect1d:

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


Similar method using functools.reduce + intersect1d by piRSquared:

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

这篇关于在多个数据框列之间查找公共元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆