首页 > 解决方案 > 删除具有一定数量 NA 的行

问题描述

我有一个数据框,在我完成转置后看起来像这样:

          step1      step2    step3     step4  ..... stepn-1     stepn
session_id 
  1       page_id   page_id    NA         NA             NA       NA
  2       page_id      NA      NA         NA             NA       NA
  3       page_id   page_id   page_id    page_id        page_id  page_id
  4       page_id   page_id   page_id     NA             NA       NA
  

对于上下文,这page_id是一些 url 子字符串,步骤指示整个跟踪网页的用户路径

有些人的步骤非常大,可能有 1000 多页,我想这对于平均水平来说是非常非常罕见的

我想要做的是找到每个会话的平均步数(非 NA 步数)

所以在上面的例子中,如果我们排除我们定义为异常值的第 3 页,平均步数是 (2+1+4+3)/4 = 10/4

一旦我有了一个平均值,我就会知道我可以排除哪些行,这样表格就会变得更易于管理。

所以总的来说

查找平均步数(非 nas)并使用此数字删除包含超过平均行数的行

标签: pythonpandasdataframe

解决方案


notna您可以使用+计算非 NaN 的数量sum并获得mean. 最后,dropna将此平均值用作阈值:

avg = df.notna().sum(axis=1).mean()
df.dropna(thresh=avg)

输出:

              step1    step2    step3    step4  stepn-1    stepn
session_id                                                      
3           page_id  page_id  page_id  page_id  page_id  page_id
4           page_id  page_id  page_id      NaN      NaN      NaN

推荐阅读