You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中Pandas按date分组后过滤不含女性记录分组的优化方法

解决方案

你提到的str.contains写法确实不必要,你需要的是精准匹配sex等于F的场景,不需要模糊匹配,直接用等值判断更准确也更高效,下面提供两种常用的实现方案:

1. 可读性优先(小数据量场景)

如果你的数据量不大,追求代码简洁易读,可以直接优化原有的groupby.filter写法:

df_filter = df_exam.groupby("date").filter(lambda gr: (gr["sex"] == "F").any())
  • 优势:代码逻辑直观,和业务需求的描述完全对应:按date分组,保留组内存在sex=F的分组
  • 劣势:大数据量下性能一般,需要遍历每个分组执行lambda函数

2. 性能优先(大数据量场景,行业常用写法)

工业界处理大批量数据时更推荐先筛选有效分组键,再过滤全表的思路,全程用pandas矢量化操作,避免分组迭代,性能提升非常明显:

# 提取所有包含女性记录的日期
valid_dates = df_exam.loc[df_exam["sex"] == "F", "date"].unique()
# 过滤原表只保留符合要求的日期数据
df_filter = df_exam[df_exam["date"].isin(valid_dates)]
  • 优势:性能比groupby.filter高5~10倍(百万行以上数据差距更明显),通用性极强,修改判断条件就能适配其他分组过滤需求
  • 验证:用你提供的示例数据运行,会自动过滤掉没有女性的2000-2、2000-4两个分组,结果完全符合预期

内容的提问来源于stack exchange,提问作者Erwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:36:03