如何使用NumPy计算n年数据的最大百分比变化及对应年份
问题说明
需要计算并输出两个结果:
- 最大百分比变化(maximum percentage change)
- 该变化对应的年份(year)
给定的NumPy数组结构如下:
import numpy as np array = np.array([[2010,2011,2012,2013,2014,2015,2016,2017,2018,2019], [1996,2165,2342,2511,2829,3052,3299,3523,3741,3864]])
数组第一行为年份序列,第二行为对应年份的统计数值。
原有代码错误点
现有实现存在几个明显问题,无法正常运行:
compare = np.roll(array,1) pcdiff = (compare - pcdiff)/compare))
- 直接对整个二维数组做移位操作,会把年份行和数值行的元素混排,逻辑完全错误
- 计算
pcdiff时提前引用了尚未定义的pcdiff变量,属于循环引用错误 - 语句末尾多了一个右括号,语法不合法
- 百分比变化计算逻辑颠倒,且没有处理首年无前序对比数据的边界情况
正确实现代码
百分比变化的计算逻辑为:(当年数值 - 前一年数值) / 前一年数值,计算完成后取最大值及对应年份即可,实现代码如下:
# 拆分年份列和数值列 years = array[0] values = array[1] # 计算相邻年份的百分比变化,首年无对比数据直接跳过 pct_change = (values[1:] - values[:-1]) / values[:-1] # 定位最大百分比变化的位置 max_change_pos = pct_change.argmax() # 提取结果 max_percent_change = pct_change[max_change_pos] target_year = years[1:][max_change_pos] # 输出结果 print(f"最大百分比变化:{max_percent_change:.2%}") print(f"变化发生年份:{target_year}")
运行后输出结果为:
最大百分比变化:12.66% 变化发生年份:2014
内容的提问来源于stack exchange,提问作者QWERTY_
相关产品推荐
相关产品推荐

