gpt4 book ai didi

python - 比较多个列以获取两个 Pandas Dataframes 中不同的行

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:59 28 4
gpt4 key购买 nike

我有两个数据框:

df1=
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2

df2=
A B C
0 A2 B2 C10
1 A1 B3 C11
2 A9 B4 C12

我想根据一两列(或更多列)在 df1 中找到 df2 中找不到的行。因此,如果我只比较“A”列,则在 df2 中找不到 df1 中的以下行(请注意,“B”列和“C”列不用于 df1 和 df2 之间的比较)

    A    B   C
0 A0 B0 C0

我想返回一个系列

0   False
1 True
2 True

或者,如果我只比较“A”列和“B”列,则 df1 中的以下行在 df2 中找不到(请注意,“C”列不用于 df1 和 df2 之间的比较)

    A    B   C
0 A0 B0 C0
1 A1 B1 C1

我想返回一个系列

0   False
1 False
2 True

我知道如何使用集合来完成此操作,但我正在寻找一种直接的 Pandas 方法来完成此操作。

最佳答案

如果您的版本是 0.17.0 那么您可以使用 pd.merge并传递感兴趣的列 how='left' 并将 indicator=True 设置为值是否仅出现在左侧或两者中。然后,您可以测试附加的 _merge col 是否等于“both”:

In [102]:
pd.merge(df1, df2, on='A',how='left', indicator=True)['_merge'] == 'both'

Out[102]:
0 False
1 True
2 True
Name: _merge, dtype: bool

In [103]:
pd.merge(df1, df2, on=['A', 'B'],how='left', indicator=True)['_merge'] == 'both'

Out[103]:
0 False
1 False
2 True
Name: _merge, dtype: bool

合并后的输出:

In [104]:
pd.merge(df1, df2, on='A',how='left', indicator=True)

Out[104]:
A B_x C_x B_y C_y _merge
0 A0 B0 C0 NaN NaN left_only
1 A1 B1 C1 B3 C11 both
2 A2 B2 C2 B2 C10 both

In [105]:
pd.merge(df1, df2, on=['A', 'B'],how='left', indicator=True)

Out[105]:
A B C_x C_y _merge
0 A0 B0 C0 NaN left_only
1 A1 B1 C1 NaN left_only
2 A2 B2 C2 C10 both

关于python - 比较多个列以获取两个 Pandas Dataframes 中不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33524000/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com