Pandas如何高效实现月度环比值同比差值分档计算
环比值同比分类计算问题
原始数据
给定如下Pandas数据框df:
date mom_pct 0 2020-1-31 1.4 1 2020-2-29 0.8 2 2020-3-31 -1.2 3 2020-4-30 -0.9 4 2020-5-31 -0.8 5 2020-6-30 -0.1 6 2020-7-31 0.6 7 2020-8-31 0.4 8 2020-9-30 0.2 9 2020-10-31 -0.3 10 2020-11-30 -0.6 11 2020-12-31 0.7 12 2021-1-31 1.0 13 2021-2-28 0.6 14 2021-3-31 -0.5 15 2021-4-30 -0.3 16 2021-5-31 -0.2 17 2021-6-30 -0.4 18 2021-7-31 0.3 19 2021-8-31 0.1 20 2021-9-30 0.0 21 2021-10-31 0.7 22 2021-11-30 0.4 23 2021-12-31 -0.3 24 2022-1-31 0.4 25 2022-2-28 0.6 26 2022-3-31 0.0 27 2022-4-30 0.4 28 2022-5-31 -0.2
计算规则
需要对比当年当月环比值和上年同月份环比值,记上年同期值为y_t-1,当年当期值为y_t,按以下规则生成新列:
- 若y_t = y_t-1,返回0
- 若y_t ∈ (y_t-1, y_t-1 + 0.3],返回1
- 若y_t ∈ (y_t-1 + 0.3, y_t-1 + 0.5],返回2
- 若y_t > (y_t-1 + 0.5),返回3
- 若y_t ∈ [y_t-1 - 0.3, y_t-1),返回-1
- 若y_t ∈ [y_t-1 - 0.5, y_t-1 - 0.3),返回-2
- 若y_t < (y_t-1 - 0.5),返回-3
期望输出
最终需要得到包含分类列categorial_mom_pct的结果,样例如下:
date mom_pct categorial_mom_pct 0 2020-1-31 1.0 NaN 1 2020-2-29 0.8 NaN 2 2020-3-31 -1.2 NaN 3 2020-4-30 -0.9 NaN 4 2020-5-31 -0.8 NaN 5 2020-6-30 -0.1 NaN 6 2020-7-31 0.6 NaN 7 2020-8-31 0.4 NaN 8 2020-9-30 0.2 NaN 9 2020-10-31 -0.3 NaN 10 2020-11-30 -0.6 NaN 11 2020-12-31 0.7 NaN 12 2021-1-31 1.0 0.0 13 2021-2-28 0.6 -1.0 14 2021-3-31 -0.5 3.0 15 2021-4-30 -0.3 3.0 16 2021-5-31 -0.2 3.0 17 2021-6-30 -0.4 -1.0 18 2021-7-31 0.3 -1.0 19 2021-8-31 0.1 -1.0 20 2021-9-30 0.0 -1.0 21 2021-10-31 0.7 3.0 22 2021-11-30 0.4 3.0 23 2021-12-31 -0.3 -3.0 24 2022-1-31 0.4 -3.0 25 2022-2-28 0.6 0.0 26 2022-3-31 0.0 2.0 27 2022-4-30 0.4 3.0 28 2022-5-31 -0.2 0.0
当前实现与问题
目前采用的实现方式是先创建多个阈值中间列,再逐列判断mom_pct所属区间,相关代码如下:
df1['mom_pct_zero'] = df1['mom_pct'].shift(12) df1['mom_pct_pos1'] = df1['mom_pct'].shift(12) + 0.3 df1['mom_pct_pos2'] = df1['mom_pct'].shift(12) + 0.5 df1['mom_pct_neg1'] = df1['mom_pct'].shift(12) - 0.3 df1['mom_pct_neg2'] = df1['mom_pct'].shift(12) - 0.5
咨询是否存在更高效的实现方式。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

