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

求可计算1995-2019年DataFrame累计天数的Python函数

正确实现累计天数计算的方案

原函数的问题

你的代码逻辑存在几个关键问题:

  • 循环计算相邻日期的差值,得到的是单日间隔,并非从1995年1月1日开始的累计天数
  • 直接通过prices['days'][i+1]赋值会触发SettingWithCopyWarning,且循环处理大数据量的DataFrame效率极低
  • 未基于起始日做基准计算,完全偏离需求目标

正确实现方式

首先确保days列是datetime类型(如果不是先转换),然后用pandas的矢量化操作直接计算,自动处理闰年:

import pandas as pd

def calculate_cumulative_days(prices):
    # 转换日期列为datetime类型(若尚未转换)
    prices['days'] = pd.to_datetime(prices['days'])
    # 定义起始基准日
    start_date = pd.to_datetime('1995-01-01')
    # 计算累计天数:日期差的天数 +1(因为起始日对应第1天)
    prices['cumulative_days'] = (prices['days'] - start_date).dt.days + 1
    return prices

关键说明

  • pandas的Timedelta.dt.days会自动处理闰年的天数统计(比如2000年2月29日会被正确计入天数差)
  • 矢量化操作比循环快几十到几百倍,适合处理大规模数据
  • 用新列cumulative_days存储结果,避免覆盖原始日期数据(如果需要覆盖原始列,直接替换列名即可)

示例验证

以1995年2月1日为例,计算结果为(pd.to_datetime('1995-02-01') - pd.to_datetime('1995-01-01')).days +1 = 31 +1 =32,完全符合你的示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:10:27