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

Pandas按年度累加T_mean列获取达阈值200对应日期的实现方法问询

实现方案

你可以直接用pandas的分组累积和功能实现需求,不需要手动为每一年重复编写代码,具体实现步骤如下:

1. 核心实现(无需单独生成每年累加列)

该方案仅需新增1列分组累积和,就可以快速得到所有年份的目标日期:

import pandas as pd
import numpy as np

# 测试数据构造代码
Date = [19370101, 19370102, 19370103, 19370104, 19370105, 19370106]
Year = [1937, 1937, 1937, 1937, 1937, 1937]
T_mean = [5.8, 5.6, 9.2, 8.0, 4.3, 6.4]

df = pd.DataFrame(Date, columns = ['Date'])
df.insert(1, "Year", Year, allow_duplicates=False)
df.insert(2, "T_mean", T_mean, allow_duplicates=False)

# 按年份分组计算组内累积和,直接生成分年累加值列
df['annual_cum_tmean'] = df.groupby('Year')['T_mean'].cumsum()

# 筛选每年首次达到或超过200的记录
limit = 200
annual_target_date = df[df['annual_cum_tmean'] >= limit].groupby('Year', as_index=False).first()

得到的annual_target_date就是所有年份对应的首次达标日期,和你期望的输出效果一致。

2. 可选方案(按需求生成每年单独累加列)

如果你确实需要为每一年单独生成对应的累加列,可以用循环批量生成,无需手动编写每个年份的逻辑:

for year in df['Year'].unique():
    # 仅对当前年份的行计算累积和,其余年份位置填充空值
    df[f'Sum_{year}'] = df.apply(lambda x: x['T_mean'] if x['Year'] == year else np.nan, axis=1).groupby('Year').cumsum()

生成列后你可以用你原来的逻辑查询对应年份的达标日期,代码和你之前的写法一致。

原代码问题说明

你之前的代码有两个核心错误:

  • 条件判断if i in dataset['Year'] == 1937语法错误,无法正确筛选对应年份的行
  • 未筛选年份就直接调用np.cumsum,计算的还是全时间段的全局累积和,不是分年结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:24:05