我有一个数据框,其中我提取了列的子集,然后想要过滤出有条件地匹配两个条件的行。
以下是数据框的外观:
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万行。有没有有效的方法来实现这一目标?
答案 0 :(得分:4)
这是当错误全部为空时首先需要dropna
的一种方式
df=df[df[['Err1','Err2']].isnull().all(1)].copy()
关于唯一计数,当您使用groupby
和Err1
Err2
时,它们两个都已经获得了count
df.fillna('NaN').groupby(["Name","Err1", "Err2"]).size()