Pandas Dataframe中两列的条件测试和比较

2024-09-28 22:25:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对包含两列的dataframe执行条件检查,如下所示:除非两个值相等,否则任何一列的内容都不能位于另一列中-不可能存在两列中都存在值且值不相等的实例。在

在下面的示例中,条件满足。尽管如此alternahaircare.com网站在列-domain和credit\u 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列中的值与domain列不匹配。在

^{pr2}$

下面的例子也是错误的-不符合我想要满足的条件。虽然有一个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()])]

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


Tags: 实例com示例df网站domain错误情况
2条回答

我已经很接近了,找到了答案:

# This gives the suspect rows - rows of data where domain value is same as the list of credit_domain present in domain
x = df[df.domain.isin([x for x in df.credit_domain.tolist() if x in df.domain.tolist()])]

# Once I have the above, it was a simple matter of looking at those rows where domain != credit_domain
x[x.domain != x.credit_domain]

如果我正确地理解了您想要的列之间的映射,您可以简单地检查domain中是否有与这两个行对应的行

  • 正在credit_domain
  • 不等于credit_domain中的行值。在

像这样

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

它返回示例数据帧的TrueFalse和{}。在

相关问题 更多 >