我有一个数据框,在这里我取一列列,然后想过滤掉有条件地匹配两个条件的行。
数据框如下所示:
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()
关于唯一计数,当您使用
groupby
和Err1
进行Err2
时,它们两个都已经获得了count
df.fillna('NaN').groupby(["Name","Err1", "Err2"]).size()