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

如何在Pandas DataFrame中从指定日期开始计算cumsum()?

从指定日期开始计算Pandas累计求和(cumsum)

问题场景

现有如下Pandas DataFrame,已经能计算所有行的累计求和:

import pandas as pd
df = pd.DataFrame([
    {'Date': '2022-01-01', 'Confirmed': 7 },
    {'Date': '2022-01-02', 'Confirmed': 4 },
    {'Date': '2022-01-03', 'Confirmed': 12 },
    {'Date': '2022-01-03', 'Confirmed': 2 },
    {'Date': '2022-01-04', 'Confirmed': 9 },
    {'Date': '2022-01-05', 'Confirmed': 10 },
])

df["Total Confirmed"]  = df["Confirmed"].cumsum()

但需要从特定日期(比如首次出现的2022-01-03)开始计算累计和,之前尝试shift()方法无效,因为它只按行数操作,没法按日期定位起始点。


解决方案

方法1:定位起始索引后调整计算

先找到目标日期首次出现的索引,再通过掩码将起始日期前的数值置为0,最后计算累计和:

import pandas as pd
df = pd.DataFrame([
    {'Date': '2022-01-01', 'Confirmed': 7 },
    {'Date': '2022-01-02', 'Confirmed': 4 },
    {'Date': '2022-01-03', 'Confirmed': 12 },
    {'Date': '2022-01-03', 'Confirmed': 2 },
    {'Date': '2022-01-04', 'Confirmed': 9 },
    {'Date': '2022-01-05', 'Confirmed': 10 },
])

# 找到目标日期首次出现的索引
start_idx = df[df['Date'] == '2022-01-03'].index[0]
# 生成掩码:起始索引及之后的行标记为True
mask = df.index >= start_idx
# 起始日期前的Confirmed设为0,之后保留原值
df['Adjusted Confirmed'] = df['Confirmed'].where(mask, 0)
# 计算累计和
df['Total Confirmed'] = df['Adjusted Confirmed'].cumsum()

方法2:分组累计(适合分段场景)

通过生成分组标记,仅对目标日期及之后的分组计算累计和:

import pandas as pd
df = pd.DataFrame([
    {'Date': '2022-01-01', 'Confirmed': 7 },
    {'Date': '2022-01-02', 'Confirmed': 4 },
    {'Date': '2022-01-03', 'Confirmed': 12 },
    {'Date': '2022-01-03', 'Confirmed': 2 },
    {'Date': '2022-01-04', 'Confirmed': 9 },
    {'Date': '2022-01-05', 'Confirmed': 10 },
])

# 生成分组标记:目标日期前为0,出现目标日期后变为1并保持
df['group'] = (df['Date'] == '2022-01-03').cumsum()
# 仅对分组1及以后计算累计和,分组0的部分设为0
df['Total Confirmed'] = df.groupby('group')['Confirmed'].cumsum().where(df['group'] >= 1, 0)

两种方法最终效果一致:2022-01-01和2022-01-02的Total Confirmed为0,从2022-01-03开始累计,结果依次为12、14、23、33。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:20:28