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

如何将时间序列DataFrame按年拆分赋值到数组并计算总和、最大值等指标

实现方案

1 直接实现列表存储拆分后的DataFrame

你需要的period[i]写法可以通过初始化空列表、循环追加结果实现,优先推荐用pandas内置的时间属性简化逻辑,不需要手动拼接起止时间:

import pandas as pd

# 第一步先确保时间列转为datetime格式,这是所有时间操作的基础
df['Time_series'] = pd.to_datetime(df['Time_series'])

year_list = [2016,2017,2018,2019,2020]
period = []  # 初始化空列表
for y in year_list:
    # 直接用dt.year筛选对应年份的数据
    year_df = df.loc[df['Time_series'].dt.year == y]
    period.append(year_df)

# 后续访问规则:period[0]对应2016年数据,period[1]对应2017年数据,以此类推

如果需要更方便的按年份直接取数,也可以用字典存储:

period_dict = {}
for y in year_list:
    period_dict[y] = df.loc[df['Time_series'].dt.year == y]
# 访问示例:period_dict[2019] 直接获取2019年的DataFrame

如果你的场景需要严格按起止时间筛选(比如存在不属于自然年的特殊周期),可以沿用你原来的起止时间逻辑,修改如下即可:

year_list = [2016,2017,2018,2019,2020]
period = []
for y in year_list:
    start = f"{y}-01-01 00:00:00"
    end = f"{y+1}-01-01 00:00:00"
    period_df = df.loc[(df['Time_series'] >= start) & (df['Time_series'] < end)]
    period.append(period_df)

2 更高效的分组统计方案(适配后续指标计算需求)

如果你拆分数据的核心目的是计算年度总和、最大值等指标,不需要单独拆分存储每个年份的DataFrame,直接用groupby分组聚合即可,性能更高、代码更简洁:

# 假设你要统计的数值列名为value,可自行替换
year_stats = df.groupby(df['Time_series'].dt.year).agg(
    年度总和=('value', 'sum'),
    年度最大值=('value', 'max'),
    最大值出现时间=('value', lambda x: df.loc[x.idxmax(), 'Time_series'])
).reset_index()

# 输出结果是一个汇总所有年度指标的DataFrame,每行对应一个年份的统计结果

补充说明

  • 如果你需要覆盖所有指定年份(哪怕某年份没有数据也保留空的DataFrame),推荐用手动指定年份、循环筛选的方案;如果只需处理有数据的年份,直接用groupby自动分组即可。
  • 如果数据量特别大,优先用分组聚合方案,避免生成大量冗余的DataFrame占用内存。

内容的提问来源于stack exchange,提问作者Anders Schjølberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:08