有人能帮我弄清楚为什么我不能在我使用 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/