gpt4 book ai didi

python - 根据匹配列值与其他数据框的组合删除行 Pandas

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:30 26 4
gpt4 key购买 nike

设置

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

两个 dfs 都有列 order_idshop

现在,如果 df1 中的一行在 order_idshop 的组合上与 df2 中的任何行匹配,那么应该从 df1 中删除该行。如果此行与 order_idshop 上的 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 应该返回空。


但是如果 df1 这样,

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

然后 df1 应该返回,

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

代码

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

到目前为止,我有,

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

我该如何解决?

最佳答案

我认为没有相同类型的列,所以首先将其转换为 string 然后 mergeindicator=True:

df3 = (df1.astype(str).merge(df2.astype(str), how='left', indicator=True)
.query('_merge == "left_only"')[df1.columns])
print (df3)
order_id shop
2 99999 'FR'
3 12345 'UK'

也可以在解决方案之前检查是否有相同的数据类型:

print (df1.dtypes)
print (df2.dtypes))

并且只转换不同dtype的列:

df2['order_id'] = df2['order_id'].astype(str)

关于python - 根据匹配列值与其他数据框的组合删除行 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589783/

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