我想对两列的数据框执行条件检查,如下所示:任何列的内容都不能在另一列中,除非两个值相等 - 可以有没有两个列中存在值并且值不相等的实例。条件测试和比较熊猫数据框中的两列
在例如下面,条件得到满足。虽然alternahaircare.com在两个栏目 - 域名和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 = alternahaircare.com和credit domain = americancrew.com的行。 – vagabond