python - 使用 isin 函数后,我不能在 pandas Dataframe 上使用 filter 函数是有原因的吗?

标签 python pandas

有人能帮我弄清楚为什么我不能在我使用 isin 函数的 Dataframe 上使用 filter 函数吗?我已将 answers.csv 导入到 Pandas 数据框中。以下代码用于删除“已删除”== 1 的所有答案。

#remove 'deleted answers' rows from the answers df - cleaning purposes

df_answers_del = df_answers[df_answers['deleted'].isin([0])]
print(df_answers_del)

这将返回答案数据框,并从 df 中删除所有已删除的答案。

      answer_id  user_id  deleted   ...     comments
0             1     1015        0   ...          NaN
1             2     1019        0   ...          NaN
2             3     1015        0   ...          NaN
3             5     1015        0   ...          NaN
4             6     1099        0   ...          NaN            
5             7     1019        0   ...          NaN
6             9     1099        0   ...          NaN
7            10     1015        0   ...          NaN        

现在的想法是通过计算 DF 中 user_id 的出现次数来过滤已回答所有 100 个问题的用户。下面的代码在最后被截断了,这是代码的副本。 #df_answers_del.groupby('user_id').filter(lambda x: len(x) > 100)

#filter all rows where users have answered all 100 questions
df_answers_del_completed = df_answers_del.groupby('user_id').filter(lambda x: len(x) > 100)
print(df_answers_del_completed)

Python 不会返回任何错误,只会返回一个空数据框。

Empty DataFrame
Columns: []
Index: []

如果我使用 isin 函数删除第一段代码,它会按预期返回,只是包含一些带有已删除答案的额外行以及不正确的已完成用户数,因为过滤器仍然计算已删除答案中的“user_id” .

       answer_id  user_id  deleted   ...     comments
0             1     1015        0   ...          NaN
1             2     1019        0   ...          NaN
2             3     1015        0   ...          NaN
3             4     1099        1   ...          NaN
4             5     1015        0   ...          NaN
5             6     1099        0   ...          NaN            
6             7     1019        0   ...          NaN
7             9     1099        0   ...          NaN
8            10     1015        0   ...          NaN  

我希望结果看起来像这样。假设结果中的用户已回答所有 100 个问题,不包括已删除的答案。

      answer_id  user_id  deleted   ...     comments
0             1     1015        0   ...          NaN
1             2     1019        0   ...          NaN
2             3     1015        0   ...          NaN
3             5     1015        0   ...          NaN
4             7     1019        0   ...          NaN               
5            10     1015        0   ...          NaN   

提前致谢

最佳答案

如果您想查看哪些回答了所有 100 个问题,为什么要在筛选时使用 > 符号?做:

df_answers_del_completed = (df_answers_del.groupby('user_id')
                                         .filter(lambda x: len(x) == 100))

关于python - 使用 isin 函数后,我不能在 pandas Dataframe 上使用 filter 函数是有原因的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53884451/

相关文章:

python - Pandas 在关联的字符串值处将列添加到新数据框?

python - 带有错误栏 : style does not apply 的 Pandas 图

pandas - 如何在JupyterLab中读取本地csv文件?

python - 打印输出时 , 和 + 的区别

python - 不匹配不是 Python 中的 NoneType 条件

python - 为什么使用 env 设置初始环境会阻止我在 Ubuntu 上启动 Python 脚本?

python - Pybrain 神经网络无法正确训练

Python 文件类型

python - pandas - pd.replace 和 TypeError

python - 获取 Pandas 中多列的加权平均值和标准差