繁体   English   中英

查找多个 dataframe 列之间的公共元素

[英]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'])]

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

最简单的方法是使用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']

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

为了简单np.intersect1d ,您可以使用np.intersect1d

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

类似的方法使用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)

您可以在pd.merge中使用how='inner'关键字参数。

例如,

dfs = [df1,df2,df3]

import functools as ft
df_common = ft.reduce(lambda left, right: pd.merge(left, right, on='A', how='inner'), dfs)

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM