使用NumPy查找数据同比降幅至少达5%的对应年份
NumPy筛选同比降幅≥5%年份的实现方案
核心思路
直接利用NumPy数组的向量化运算能力,不需要手写逐行遍历的循环,三步就能出结果:
- 用数组切片计算相邻两年的同比变化率,公式为
(当年指标值 - 上年指标值) / 上年指标值 * 100,结果为负代表同比下降 - 变化率数组长度比原数据少1,第
i位的变化率对应原数组第i+1位年份的同比情况,直接做布尔筛选找出变化率≤-5%的条目 - 提取匹配的年份和对应降幅的绝对值,按要求格式化输出即可
完整实现代码
import numpy as np # 定义原始输入数组 Year = np.array([2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]) Data = np.array([29057, 30979, 31746, 32964, 31738, 31010,31158,28736,26821,28260]) # 计算所有年份相对上一年的同比变化率(单位:%) yoy_rate = (Data[1:] - Data[:-1]) / Data[:-1] * 100 # 筛选出降幅≥5%的条目 match_mask = yoy_rate <= -5 # 提取匹配的年份、对应降幅(取绝对值转为正的百分比) match_years = Year[1:][match_mask] match_drop_rate = np.abs(yoy_rate[match_mask]) # 按指定格式输出结果 for year, rate in zip(match_years, match_drop_rate): print(f"数据降幅至少达5%的年份:({year}, {rate:.2f}%)")
运行输出结果
数据降幅至少达5%的年份:(2017, 7.77%) 数据降幅至少达5%的年份:(2018, 6.66%)
校验说明:2017年之前的年份同比最大降幅不到4%,2019年数据相对2018年为上涨,均不满足5%的筛选阈值。
内容的提问来源于stack exchange,提问作者QWERTY_
相关产品推荐
相关产品推荐

