python - 使用 isin 函数后,我无法在 pandas Dataframe 上使用 filter 函数吗?
问题描述
有人可以帮我弄清楚为什么我不能在我使用 isin 函数的 Dataframe 上使用 filter 函数吗?我已将 answers.csv 导入熊猫数据框。以下代码用于删除“已删除”== 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))
推荐阅读
- dart - StreamSink 和 Sink 有什么区别?
- c++ - 如何通过 CMake 使用他们的 SHA256 Hash 下载 boost?
- python - 如何将可选的python参数传递给带有可选参数的子函数
- dom - 修改shopify主题标记会破坏核心功能吗?
- sql-server - 使用表值参数从另一个存储过程调用现有存储过程
- sql - 给定 Timestamp 对象作为分区键,如何从 hive-metastore 获取分区路径
- c# - 使用 Json.Net 反序列化 - 内存泄漏或误用库?
- debugging - 如何配置 VS Code 以调试 vagrant 容器中的代码?
- kubernetes - 在 GKE 中向 fluentd-gcp pod 添加 PodDisruptionBudget
- javascript - 是否可以为数组创建 onSnapshot 侦听器