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

如何计算DataFrame中股票当年值与前一年同期值的差值并新增列存储

实现思路与代码

原代码存在的问题

  • df.loc()写法错误,pandas的loc索引需使用方括号,正确写法为df.loc[i, j]
  • relativedelta不是datetime对象的内置方法,需要从dateutil库导入后单独调用,正确写法为relativedelta(df.index[i], years=-1)
  • 双重循环遍历效率极低,pandas内置的向量化操作可更简洁高效实现需求

正确实现步骤

第一步:预处理数据

首先确保DataFrame的日期索引为datetime类型,避免后续时间操作报错:

import pandas as pd
# 转换索引为datetime类型
df.index = pd.to_datetime(df.index)

第二步:计算同期差值

按日期的月、日分组后偏移1年,自动匹配去年同期的数值,直接计算差值后生成新增列即可:

# 匹配去年同期数值,自动适配闰年等特殊日期问题
last_year_data = df.groupby([df.index.month, df.index.day]).shift(1)
# 生成差值新增列,列名规则为原股票名+_同比差值
df[[f"{col}_同比差值" for col in df.columns]] = df - last_year_data

如果你的数据是每年固定频次统计(比如每年只有1月1日的数据),可以用更简化的写法:

df[[f"{col}_同比差值" for col in df.columns]] = df - df.shift(1, freq='YS')

效果验证

以你给出的示例数据测试,输出结果如下:

日期ABA_同比差值B_同比差值
1990-01-013.6782.11NaNNaN
1991-01-013.812.350.1320.24
1992-01-014.022.590.210.24

1991-01-01的A列差值0.132和你举例的计算结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:06:09