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

基于聚合函数结果过滤DataFrame报错:UndefinedVariableError求助

解决GroupBy聚合后Query引用聚合结果的错误问题

问题场景

现有如下DataFrame:

date    id      value
0   2002-01-07  PA12165 119.63
1   2002-03-13  PA12165 119.48
2   2002-05-13  PA12165 114.50
3   2002-06-12  PA12165 120.27
4   2002-06-12  PA12165 120.27
...

尝试通过GroupBy聚合后用query过滤聚合结果,代码如下:

my_aggs = {'id': 'count',
           'value': [min, max, 'mean']
          }
df.groupby(['id', 'date']).agg(my_aggs).query('count > 1')

运行后报错:UndefinedVariableError: name 'count' is not defined。

问题原因

使用字典指定多字段聚合时,pandas会生成多级列(MultiIndex):第一级是原DataFrame的列名(id、value),第二级是聚合函数名(count、min、max、mean)。直接写count无法定位到具体列,必须明确指定它所属的上层列。

解决方案

方案1:直接在Query中引用多级列

通过上层列名["聚合函数名"]的格式在query中指定列:

my_aggs = {'id': 'count',
           'value': [min, max, 'mean']
          }
agg_df = df.groupby(['id', 'date']).agg(my_aggs)
filtered_df = agg_df.query('id["count"] > 1')

方案2:重命名多级列为单级列

将聚合后的多级列合并为单级列,简化后续过滤操作:

my_aggs = {'id': 'count',
           'value': [min, max, 'mean']
          }
agg_df = df.groupby(['id', 'date']).agg(my_aggs)
# 用下划线连接多级列名,生成单级列
agg_df.columns = ['_'.join(col) for col in agg_df.columns]
# 直接用合并后的列名过滤
filtered_df = agg_df.query('id_count > 1')

方案3:聚合时直接指定列别名

在聚合字典中为每个聚合结果指定别名,避免生成多级列:

my_aggs = {
    'id': ('id_count', 'count'),
    'value': [('value_min', min), ('value_max', max), ('value_mean', 'mean')]
}
agg_df = df.groupby(['id', 'date']).agg(my_aggs)
# 直接用指定的别名过滤
filtered_df = agg_df.query('id_count > 1')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:12:36