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

如何按指定列排序DataFrame并筛选节假日(Y)的分组结果?

解决Pandas分组后仅显示节假日(hday="Y")载客量均值的问题

方法1:先筛选再分组(更高效)

直接先过滤出节假日数据,再按行政区分组计算均值,省去先计算所有分组再筛选的冗余步骤:

import pandas as pd
df = pd.read_csv("2_taxi_nyc.csv")
# 筛选hday为"Y"的数据,再按borough分组求pickups均值
holiday_pickups_mean = df[df['hday'] == 'Y'].groupby("borough")["pickups"].mean()
print(holiday_pickups_mean)

方法2:分组后再筛选(适合已完成分组的场景)

如果已经执行了全部分组计算,想从结果中提取节假日数据,有两种简单方式:

方式A:用多级索引的xs方法

分组后的结果是多级索引(borough + hday),xs方法可以直接提取指定层级的索引值:

import pandas as pd
df = pd.read_csv("2_taxi_nyc.csv")
# 先完成全部分组计算
grouped_result = df.groupby(["borough", "hday"])["pickups"].mean()
# 提取hday为"Y"的所有行
holiday_result = grouped_result.xs('Y', level='hday')
print(holiday_result)

方式B:重置索引后用query筛选

把分组后的多级索引转为普通列,就能正常使用query筛选了:

import pandas as pd
df = pd.read_csv("2_taxi_nyc.csv")
grouped_result = df.groupby(["borough", "hday"])["pickups"].mean().reset_index()
# hday转为普通列后,query语法正常生效
holiday_result = grouped_result.query('hday == "Y"')
print(holiday_result)

关于你之前的query报错原因

你之前的错误主要是因为分组结果是多级索引,query默认只识别普通列,无法直接引用索引中的hday。如果非要直接对分组后的索引结果用query,可以用get_level_values指定索引,但写法不如上面两种直观:

grouped_result.query('get_level_values("hday") == "Y"')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:55:22