>我有一个数据帧,我在其中获取列的子集,然后想要过滤掉有条件地匹配两个条件的行。
数据帧如下所示:
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 的唯一计数?
我不想使用 for 循环并遍历数据,因为数据集超过 100k 行。有没有有效的方法来实现这一目标?
这是当 Errs 全部为空时首先需要dropna
的一种方法
df=df[df[['Err1','Err2']].isnull().all(1)].copy()
关于唯一计数,当您与Err1
和Err2
groupby
时,它已经得到了他们两个count
df.fillna('NaN').groupby(["Name","Err1", "Err2"]).size()