gpt4 book ai didi

python - 检查是否在其他 Pandas 数据框中找到了两个列值

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:36 25 4
gpt4 key购买 nike

设置

我有 2 个 pandas dfs(df1 和 df2),其中包含一些重叠行和一些非重叠行。

两个 dfs 都有列 order_idshop

现在,如果 df1 行与 order_idshop 组合上的 df2 行匹配,则什么都没有。但是,如果 df1 行与 order_idshop 组合上的 df2 行不匹配,则应将此 df1 行添加到 df2。


示例

df2 是这样的,

    order_id    shop
0 12345 'NL'
1 45678 'FR'
2 12345 'DE'
3 34567 'NL'

现在如果 df1 这样,

    order_id    shop
0 12345 'NL'
1 45678 'FR'

然后什么都没有。


但是如果 df1 这样,

        order_id    shop
0 12345 'NL'
1 99999 'FR'
2 12345 'UK'

然后第 1 行和第 2 行应该添加到 df2,即使第 1 行的 shop 值和第 2 行的 order_id 已经在 df2

生成的 df2 应该是这样的,

    order_id    shop
0 99999 'FR'
1 12345 'UK'
2 12345 'NL'
3 45678 'FR'
4 12345 'DE'
5 34567 'NL'

请注意,order_id 列是 int,shop 列是 string。

所以在图形方面我想要实现的是这样的:

enter image description here

代码

我创建了一条可怕的线,但它并没有真正起作用......

到目前为止,我有,

result_df = df1[(~df1['order_id'].astype(str).isin(df2['order_id'].astype(str)))]

我该如何解决?


额外

如果 df1 这样,

        order_id    shop
0 12345 'NL'
1 99999 'FR'
2 12345 'UK'

我如何比较 df1df2 这样我得到 df3 看起来像,

        order_id    shop
0 99999 'FR'
1 12345 'UK'

最佳答案

如果所有行都是唯一的,请将 concatdrop_duplicates 一起使用:

df = pd.concat([df2, df1], ignore_index=True).drop_duplicates()
print (df)
order_id shop
0 12345 'NL'
1 45678 'FR'
2 12345 'DE'
3 34567 'NL'
5 99999 'FR'
6 12345 'UK'

如果不是唯一过滤器不等于 merge 使用 indicator=True 然后 concatdf2:

df3 = df1.merge(df2, how='left', indicator=True).query('_merge == "left_only"')[df1.columns]
df = pd.concat([df2, df3], ignore_index=True)

关于python - 检查是否在其他 Pandas 数据框中找到了两个列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54588820/

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