[英]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'])]
请让我知道我哪里出错了。 干杯
最简单的方法是使用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.