gpt4 book ai didi

python - Pandas 数据框中两列的条件测试和比较

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

我正在尝试对具有两列的数据框执行条件检查,如下所示:除非两个值相等,否则任何一列的内容都不能在另一列中 - 不可能存在两个列中都存在值的实例,并且值不相等。

例如下面,满足条件。尽管 alternahaircare.com 在两个列中 - domain 和 credit_domain,这是唯一发生这种情况的情况,但两个值是相等的。

Out[198]: df
domain credit_domain
2 alternahaircare.com alternahaircare.com
3 alternahaircare.myshopify.com alternahaircare.com
4 shop.alternahaircare.com alternahaircare.com
5 americancrew.com americancrew.com

下面是上面的两个修改示例,其中不满足我要满足的条件:

在这一行中,您可以看到有一行,其中 domain = alternahaircare 和 credit_domain = americancrew.com。这是错误的 - 现在 alternahaircare.com 出现在两个列中,但有一个实例,其中 credit_domain 列中的值与域列不匹配。

Out[199]: df
domain credit_domain
2 alternahaircare.com americancrew.com
3 alternahaircare.myshopify.com alternahaircare.com
4 shop.alternahaircare.com alternahaircare.com
5 americancrew.com americancrew.com

下面的实例也是错误的——不符合我想要满足的条件。虽然有一个 alternahaircare.com == alternahaircare.com 的实例,但也有一个 alternahaircare.com 的实例被分配给一个不是它本身的值,即 americacrew.com

Out[198]: df
domain credit_domain
2 alternahaircare.com alternahaircare.com
3 alternahaircare.myshopify.com alternahaircare.com
4 shop.alternahaircare.com alternahaircare.com
5 alternahaircare.com americancrew.com

第二个问题可以通过检查域值的计数并识别出现两次的任何内容来轻松解决。

第一个问题让我很困惑。我的方法是识别潜在的问题行,然后尝试使用 groupby 和条件语句:

potential_error_rows = df[df.credit_domain.isin([x for x in df.credit_domain.tolist() if x in df.domain.tolist()])]

想不出除此之外还能做什么!

最佳答案

如果我正确理解了你想要的列之间的映射,你可以简单地检查 domain 中是否有任何行同时对应于

  • credit_domain
  • 不等于它们在 credit_domain 中的行值。

像这样

def is_valid(df):
return ~(df.domain.isin(df.credit_domain) &
(df.domain != df.credit_domain)).any()

它为您的示例数据帧返回 TrueFalseFalse

关于python - Pandas 数据框中两列的条件测试和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569853/

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