查找多个数据框列之间的公共元素
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,我想找到
- 所有列中的公共词
- 属于自己专栏的独有词,不常见的词。
示例:
鸭子是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']
希望你能帮助我。我是 python 和 pandas 的新手,所以请多多包涵。我正在尝试查找三个数据框之间的通用词,并且我正在使用 Jupiter Notebook。
举个例子:
df1=
A
dog
cat
cow
duck
snake
df2=
A
pig
snail
bird
dog
df3=
A
eagle
dog
snail
monkey
所有数据框中只有一列是A,我想找到
- 所有列中的公共词
- 属于自己专栏的独有词,不常见的词。
示例:
鸭子是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']