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

Python中对时间序列Pandas Series按月份索引排序并按月分组求年平均

解决Pandas时间序列按年度月度分组求平均的需求

没问题,我来一步步帮你搞定这个需求!咱们先理清楚核心逻辑:先计算每个年度对应月份的平均值(自动忽略NaN),再把相同月份的各年度平均值整合到一起,最后按自然月份顺序排序。

完整代码实现

假设你的Series对象名为s,直接用下面的代码就能得到目标DataFrame:

import pandas as pd

# 第一步:确保Series的索引是Datetime类型(如果还不是的话)
s.index = pd.to_datetime(s.index)

# 第二步:计算每个「年度-月份」的平均值(自动跳过NaN)
# 这里用strftime('%b')获取月份的缩写(Jan、Feb...)
year_month_avg = s.groupby([s.index.year, s.index.strftime('%b')]).mean()

# 第三步:按月份分组,把对应各年度的平均值收集成集合/列表
# 如果你想要集合就把list换成set
df_new = year_month_avg.reset_index(level=0).groupby(level=0)[s.name].apply(list).to_frame()

# 第四步:按自然月份顺序排序(避免字符串按字母排序的混乱)
month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
df_new = df_new.reindex(month_order)

代码解释

  1. 索引格式校验:先把索引转成DatetimeIndex,这样才能方便提取年份、月份等时间属性。
  2. 年度-月份平均值计算:通过groupby同时按年份和月份缩写分组,用mean()计算每组的平均值(默认会跳过NaN值,完美适配你的数据情况)。
  3. 整合同月份数据:把年份索引重置为列后,再次按月份分组,用apply(list)把每个月份下的所有年度平均值打包成列表(换成set就能得到集合)。
  4. 自然排序:因为字符串默认按字母排序会乱序(比如Apr会在Aug前面),所以我们手动定义月份顺序,用reindex重新排列索引。

示例验证

如果用示例数据测试:

# 生成示例时间序列(含NaN)
dates = pd.date_range('2014-01-01', '2017-12-31', freq='30T')
import numpy as np
data = np.random.randn(len(dates))
data[::100] = np.nan  # 插入部分NaN值
s = pd.Series(data, index=dates, name='temperature')

运行代码后,df_new的索引就是从Jan到Dec的月份缩写,每个行的temperature列就是对应月份2014-2017年的平均值组成的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:03:51