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

15 浏览
0 Comments

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

希望你能帮助我。我是Python和Pandas的新手,所以请谅解。我正在尝试找到三个数据框之间的共同词,我正在使用Jupyter Notebook。

举个例子:

df1=

A

dog

cat

cow

duck

snake

df2=

A

pig

snail

bird

dog

df3=

A

eagle

dog

snail

monkey

所有数据框中只有一个名为A的列。我想找到:

1. 所有列之间的共同词

2. 各自列中独有的词,不包含共同词

例如:

duck是df1中独有的,snail是df2中独有的,monkey是df3中独有的。

我尝试使用下面的代码,但没有得到我想要的结果:

df1[df1['A'].isin(df2['A']) & (df2['A']) & (df3['A'])]

请告诉我我哪里出错了。谢谢。

0
0 Comments

问题:如何找到多个数据框列之间的共同元素?

解决方法:

可以使用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)

参考:

0
0 Comments

多个数据框之间查找共同元素的问题起因是现有方法需要在多个`isin`调用之间进行链式操作。更糟糕的是,您需要追踪哪个数据框是最大的,并在该数据框上调用`isin`。否则,它将无法正常工作。

为了简化操作,可以使用`np.intersect1d`函数来解决问题。通过将多个数据框的列作为参数传递给`np.intersect1d`,即可获取它们之间的共同元素。

另一种解决方法是使用`functools.reduce`函数和`intersect1d`函数。通过将多个数据框的列作为列表传递给`reduce`函数,并指定`np.intersect1d`作为函数参数,可以获取它们之间的共同元素。

如果想要在输出中去除引号和逗号,可以将共同元素列表转换为数据框,这样输出结果会更整洁。

以上方法在数据框长度不同的情况下仍然适用。

0
0 Comments

问题的出现原因:

问题是要找到多个数据框列之间的共同元素。在这种情况下,作者遇到了一个问题:当输出结果时,元素都用单引号括起来,并用逗号分隔。作者希望以一个干净的列表的形式返回结果。

解决方法:

为了解决这个问题,作者使用了两种方法。第一种方法是使用set的交集操作符来找到共同元素。作者使用set函数将每个数据框列转换为一个集合,然后使用交集操作符找到这些集合的交集。这将返回一个包含共同元素的列表。第二种方法是使用functools模块中的reduce函数。作者首先将每个数据框列转换为集合,并使用map函数将这些集合作为参数传递给set.intersection函数。然后,作者使用reduce函数将多个集合的交集计算为一个集合。最后,作者将结果转换为列表形式。

以下是中文版本的整理文章:

问题:如何找到多个数据框列之间的共同元素?

在解决这个问题时,作者尝试了两种方法。

第一种方法是使用set的交集操作符。作者使用set函数将每个数据框列转换为一个集合,并使用交集操作符找到这些集合的交集。下面是示例代码:

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

这将返回一个包含共同元素的列表。

第二种方法是使用functools模块中的reduce函数。作者首先将每个数据框列转换为集合,并使用map函数将这些集合作为参数传递给set.intersection函数。然后,作者使用reduce函数将多个集合的交集计算为一个集合。下面是示例代码:

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

这也将返回一个包含共同元素的列表。

然而,作者在输出结果时遇到了一个问题:元素都用单引号括起来,并用逗号分隔。如果想要以一个干净的列表的形式返回结果,可以使用以下代码:

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

这将返回一个干净的列表,其中包含共同元素。

希望这篇文章对你有帮助!

0