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

Pandas为DataFrame新增列计算间隔4行的年度同比差值

实现方案

pandas原生提供了位移计算方法,完全不需要写逐行循环,代码更简洁、性能更高,也不会出现手动维护列表、索引导致的bug。

基础快速实现

季度频率数据的年度同比对应滞后4期的差值,直接用shift(4)对目标列做位移后做差即可,前4行无上年同期数据会自动填充NaN,和你现有循环逻辑的计算结果完全一致:

# 单个DataFrame处理,一行代码完成列新增
df['Percentage point change'] = df['Capital buffer rate (%)'] - df['Capital buffer rate (%)'].shift(4)

基于你给出的示例数据,计算结果如下:

QuarterCapital buffer rate (%)Percentage point change
2019-0338NaN
2019-0643NaN
2019-0938NaN
2019-1237NaN
2020-0337-1
2020-0637-6
2020-0937-1
2020-1235-2
2021-03370
2021-06414
2021-09436
2021-12449

批量处理多份数据集

把5份不同机构类型的DataFrame统一存入列表,循环处理即可,不需要为每个数据集单独创建临时变量、存储列表:

# 示例:df_list = [投资公司数据集, 银行数据集, 证券机构数据集, ...]
for temp_df in df_list:
    temp_df['Percentage point change'] = temp_df['Capital buffer rate (%)'] - temp_df['Capital buffer rate (%)'].shift(4)

高鲁棒性实现(推荐)

如果存在数据集季度缺失、行顺序错乱的可能,不要硬编码位移行数,先将Quarter列转为时间类型并设为索引,基于时间偏移做对齐计算,完全避免行位置异常导致的计算错误:

for temp_df in df_list:
    # 转换季度列为时间格式,排序后设为索引
    temp_df['Quarter'] = pd.to_datetime(temp_df['Quarter'])
    temp_df = temp_df.set_index('Quarter').sort_index()
    # 按1年时间偏移做位移,自动匹配上年同期数据,缺失值自动返回NaN
    temp_df['Percentage point change'] = temp_df['Capital buffer rate (%)'] - temp_df['Capital buffer rate (%)'].shift(freq='1Y')
    # 不需要时间索引的话可以重置回普通列
    temp_df = temp_df.reset_index()

该实现不依赖数据的物理行位置,哪怕数据集中缺少部分季度、行顺序被打乱,计算结果依然准确,适合生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:42:29