熊猫-用空值替换行,并删除匹配两个条件的行

时间:2019-08-04 21:04:05

标签: python pandas dataframe data-analysis

我有一个数据框,其中我提取了列的子集,然后想要过滤出有条件地匹配两个条件的行。

以下是数据框的外观:

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万行。有没有有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:4)

这是当错误全部为空时首先需要dropna的一种方式

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

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

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