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

Pandas按索引列过滤groupby分组后数据集问题咨询

问题解决

首先明确两个核心错误点:

  • 你执行data.groupby(["Year", "Month", "Day"]).sum()后得到的grouped是聚合完成的普通DataFrame,不是GroupBy对象,此时调用的filter是DataFrame的列过滤方法,完全不符合你的行筛选需求。
  • 你当前的索引是三层MultiIndex(多层索引),每一层都对应Year、Month、Day的名称,不是无名称的元组索引,可以直接按索引层筛选。

解决方案

筛选2017年8月的所有记录

有两种常用写法:

  1. 用loc直接匹配多层索引(最简洁):
# 元组(2017,8)匹配前两层索引=2017年、8月,冒号表示保留所有列
aug_2017_data = grouped.loc[(2017, 8), :]
  1. 用索引层值判断(扩展性更强,适合复杂条件):
aug_2017_data = grouped[
    (grouped.index.get_level_values('Year') == 2017)
    & (grouped.index.get_level_values('Month') == 8)
]

筛选Baana列值大于300的记录

直接用布尔索引即可,不需要调用filter方法:

baana_over_300 = grouped[grouped['Baana'] > 300]

原有代码错误原因

你之前写的grouped.filter(lambda x: x > (2014, 1, 1) for x in grouped.index)属于语法错误,将生成器表达式传入了DataFrame的filter方法,该方法本身只用于筛选列,不处理行筛选逻辑,因此返回空结果。

GroupBy对象的filter方法是用于分组级别的过滤(比如只保留分组求和结果满足特定条件的整个分组),你已经完成了聚合操作,不需要再使用该方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:36:03