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

如何借助datetime索引用groupby按日-月分组跨多年数据并去除多重索引

解决方案

有两种简洁的方式可以避免生成多重索引,同时实现按「月-日」分组求最大值的需求:

方法1:直接将datetime索引格式化为mm-dd字符串分组

利用datetime索引的strftime方法,直接生成mm-dd格式的字符串作为分组键,分组结果会自动使用该字符串作为单级索引:

import numpy as np
import pandas as pd

# 假设df已将索引转为datetime类型
result = df.groupby(df.index.strftime('%m-%d')).agg({"Data_Value": np.max})

得到的结果会有365行(若数据包含闰年2月29日,可根据需求单独处理,比如合并到2月28日),索引为01-01到12-31的字符串格式,完全符合需求。

方法2:按一年中的第几天(dayofyear)分组后转换索引

先通过dayofyear获取每个日期在一年中的序号(1到365/366),分组后再将序号转换为mm-dd格式:

import numpy as np
import pandas as pd

# 按dayofyear分组求最大值
result = df.groupby(df.index.dayofyear).agg({"Data_Value": np.max})
# 将dayofyear索引转换为mm-dd格式
result.index = pd.to_datetime(result.index, format='%j').strftime('%m-%d')

这种方式分组逻辑更简洁,若后续需要对日期序号做数值运算也更方便,最后转换为mm-dd索引即可。

原代码生成多重索引的原因

你之前使用[df.index.month, df.index.day]作为分组键,本质是按两个维度(月份、日期)分组,因此Pandas会生成包含month和day的多级索引。而上面两种方法都是用单个分组键(字符串格式的mm-dd或数字格式的dayofyear),所以结果为单级索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:07:12