如何按指定列排序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
相关产品推荐
相关产品推荐

