我有一个数据框,在这里我取一列列,然后想过滤掉有条件地匹配两个条件的行。

数据框如下所示:

Name     Err1    Err2    Page
Amazon   404     201     Shopping
Facebook 202             Social
Goku                     Shopping
Ross             203     Shopping


我将空值替换为“-”,将数据与Err1和Err2分组,并获得Err1的唯一计数。

    df['err1'].fillna("-", inplace=True)
    df['err2'].fillna("-", inplace=True)
    df.groupby(["Name","Err1", "Err2"]).agg({"Err1": "count"})



这给了我:

Name     Err1    Err2    Err1
Amazon   404     201     1
Facebook 202      -      1
Goku      -       -      1
Ross      -      203     1


a)我想删除所有同时具有“ Err1”和“ Err2” ==“-”的行,并仅在Err1或Err2不是'-'的情况下显示行。

b)在上面,我如何获得Err1和Err2的唯一计数的总和,而不是Err1的唯一计数?

我不想用于循环并遍历数据,因为数据集超过10万行。有没有有效的方法来实现这一目标?

最佳答案

这是当Errs全部为null时首先需要dropna的一种方法

df=df[df[['Err1','Err2']].isnull().all(1)].copy()


关于唯一计数,当您使用groupbyErr1进行Err2时,它们两个都已经获得了count

df.fillna('NaN').groupby(["Name","Err1", "Err2"]).size()

08-24 17:10