如何在Pandas中按季节与工作日进行多时段分组聚合?
解决方案
你可以通过以下步骤实现按季节+工作日分组计算平均值:
1. 确保索引为时间类型
如果你的DataFrame索引还不是DatetimeIndex,先完成转换:
df.index = pd.to_datetime(df.index)
2. 添加季节标签
以北半球常规季节划分为例(12-2月冬季,3-5月春季,6-8月夏季,9-11月秋季),通过月份映射生成季节列:
# 定义月份到季节的映射关系 season_map = { 1: '冬季', 2: '冬季', 3: '春季', 4: '春季', 5: '春季', 6: '夏季', 7: '夏季', 8: '夏季', 9: '秋季', 10: '秋季', 11: '秋季', 12: '冬季' } # 给DataFrame新增季节列 df['季节'] = df.index.month.map(season_map)
如果是南半球数据,只需调整映射关系(比如6-8月为冬季、12-2月为夏季)即可。
3. 按季节+工作日分组求平均
有两种分组方式可选,按需使用:
方式一:用数字标识工作日(0=周一,6=周日)
df_season_weekday = df.groupby(['季节', df.index.weekday]).mean()
方式二:用直观的工作日名称
# 新增中文工作日名称列(需确保环境支持中文 locale) df['工作日'] = df.index.day_name(locale='zh_CN.UTF-8') # 若用英文名称:df['工作日'] = df.index.day_name() # 分组计算平均值 df_season_weekday = df.groupby(['季节', '工作日']).mean()
结果说明
最终的df_season_weekday是多级索引DataFrame,外层为季节、内层为工作日,对应值即为该季节对应工作日的平均值。
内容的提问来源于stack exchange,提问作者NeStack
相关产品推荐
相关产品推荐

