python - 过滤掉一些不包含python中列的特定情况的组
问题描述
我是 python 新手,我有一个关于如何过滤掉一些不包含任何女性案例的组(按 'date' 分组)的问题。假设我有一个如下数据框:
import pandas as pd
import numpy as np
exam_data = {
'date': ['2000-1', '2000-1', '2000-1', '2000-2', '2000-2', '2000-3', '2000-4', '2000-4', '2000-5', '2000-5','2000-5'],
'sex': ['M', 'M', 'F', 'M', 'M', 'F', 'M', 'M', 'F', 'F', 'M'],
'qualify': ['yes', 'no', 'yes', 'no', 'no', 'yes', 'yes', 'no', 'no', 'yes', 'no']}
df_exam = pd.DataFrame(exam_data)
我已经尝试过,这似乎是正确的,但我觉得它太具体了,因为我使用了包含“F”的字符串:
df_filter = df_exam.groupby("date").filter(lambda gr: gr["sex"].str.contains("F").any())
是否有任何其他算法比这更有效,或者可能比这更多的练习?
非常感谢您的评论。
解决方案
为了获得更好的性能,永远不要使用,更好的是通过使用掩码和过滤器filter
创建布尔掩码:GroupBy.transform
boolean indexing
df_filter = df_exam[df_exam["sex"].eq("F").groupby(df_exam["date"]).transform('any')]
或者也可以替代,如果更好,取决于数据transform
- 按条件获取所有s 并使用date
过滤:boolean indexing
Series.isin
dates = df_exam.loc[df_exam["sex"].eq("F"), 'date'].unique()
df_filter = df_exam[df_exam["date"].isin(dates)]
推荐阅读
- javascript - 重复字体真棒图标导致潜在的角度内存不足崩溃[不是特定于浏览器]
- f# - F# .NET Core 2.1 简单的 crud 应用程序:控制器未注册
- excel - 筛选至少拥有 3 种特定产品的公司
- javascript - 如何批准用户注册 Firebase?
- jestjs - 开玩笑,多个测试文件的单一设置?
- powerbi - PowerBi - 如何以静默方式向 app.powerbi.com 进行身份验证
- python - 使用 pip RHEL 安装 matplotlib 时出现错误“无法卸载 'pyparsing'”
- html - 我可以更改初始包含块大小吗?
- python - python 与 pymongo 验证失败
- java - JAVA中的递归字符串