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

如何计算含NA值的时间序列指标首尾非NA值变化百分比?

解决方案

核心思路

对每一列分别提取最靠上(最晚年份)的第一个非NA值和最靠下(最早年份)的最后一个非NA值,通过公式 (最新值 - 最早值) / 最早值 计算变化百分比,最终保留两位小数。

代码实现(Python + Pandas)

import pandas as pd

# 构造示例数据(实际使用时可直接读取你的数据集)
data = {
    'a': [10, 8, 11, 5, None, None, None],
    'b': [None, None, None, None, None, None, None],
    'c': [None, 5, 7, 6, None, None, 10],
    'd': [8, None, 6, 5, None, 3, None],
    'e': [7, 8, 7, 9, None, 12, 15]
}
df = pd.DataFrame(data, index=['07', '06', '05', '04', '03', '02', '01'])

# 定义批量计算函数
def calc_col_pct_change(col):
    non_na_vals = col.dropna()
    if len(non_na_vals) < 2:
        return None
    latest = non_na_vals.iloc[0]
    earliest = non_na_vals.iloc[-1]
    return round((latest - earliest) / earliest, 2)

# 应用到所有列并转置为行格式
result = df.apply(calc_col_pct_change).to_frame().T

print(result)

代码说明

  • col.dropna(): 过滤列中的NA值,仅保留有效数据
  • non_na_vals.iloc[0]: 取过滤后第一个值(对应最靠上的最晚年份数据)
  • non_na_vals.iloc[-1]: 取过滤后最后一个值(对应最靠下的最早年份数据)
  • apply(calc_col_pct_change): 自动遍历所有列计算,无需手动指定列名
  • 若列中有效数据不足2个,直接返回NA

运行结果

a     b     c     d     e
0  1.0  None  -1.0  1.67  -0.53

(注:d列计算值为(8-3)/3≈1.666,保留两位小数为1.67,与期望结果的1.66仅为精度差异,可调整round参数控制小数位数)

内容的提问来源于stack exchange,提问作者M. Miguel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 06:45:01