gpt4 book ai didi

python - 计算年份数据的逐月和逐年变化

转载 作者:行者123 更新时间:2023-12-03 18:49:43 24 4
gpt4 key购买 nike

我有一个经济系列的数据框,它的值每个月都可以修改,为给定日期添加一个新值并通过 realtime_start 对其进行索引。 (见下面的数据框)。 realtime_start表示 value 的日期对于 date变得有效。这value一旦另一个取代它,它就会过期。

<表类="s-表"><头><日>日期 实时开始值<正文>2020-11-012020-12-04142629.02020-11-012021-01-08142764.02020-11-012021-02-05142809.02020-12-012021-01-08142624.02020-12-012021-02-05142582.02020-12-012021-03-05142503.02021-01-012021-02-05142631.02021-01-012021-03-05142669.02021-01-012021-04-02142736.02021-02-012021-03-05143048.02021-02-012021-04-02143204.02021-03-012021-04-02144120.0

我想要一种简单的方法来计算 value 中的月度变化 |基于最后一个已知条目 date .

计算方法:取第n月的第一个发布(基于realtime_start)减去第n-1个月的相关发布。相关版本是其 realtime_start 的最新版本日期不超过第n月。

在下面查看所需的输出

<表类="s-表"><头><日>日期 环比变化<正文>2020-11-01NaN2020-12-01-1402021-01-01492021-02-013792021-03-01916

对于 2021-03-01 , MoM 变化值为 144120.0 - 143204.0 = 916.0
对于 2021-02-01 , MoM 变化值为 143048.0 - 142669.0 = 379.0
对于 2021-01-01 , MoM 变化值为 142631.0 - 142582.0 = 49.0

同样,我想根据 date 处的最后已知值计算同比变化。 (实际数据框架进一步延伸到过去)。我还想根据 date 处的最后已知值计算 3 个月(滚动)月度变化的平均值。 .

economic series dataframe

最佳答案

解决方案

df = df.set_index('date')

first = df.groupby(level=0).first()
m = df['realtime_start'].le(first['realtime_start'].shift(-1))
last_val = df['value'].mask(~m).groupby(level=0).last().shift()

mom_change = (first['value'] - last_val).reset_index(name='MoM change')

说明

将数据帧的 index 设置为 date 列,然后将数据帧group level=0 并使用 first 聚合以选择每个唯一 date

的第一行
>>> first
realtime_start value
date
2020-11-01 2020-12-04 142629.0
2020-12-01 2021-01-08 142624.0
2021-01-01 2021-02-05 142631.0
2021-02-01 2021-03-05 143048.0
2021-03-01 2021-04-02 144120.0

移动first数据帧中的realtime_start列,然后将其与df中的realtime_start列进行比较以创建 bool 掩码 m

>>> m

date
2020-11-01 True
2020-11-01 True
2020-11-01 False
2020-12-01 True
2020-12-01 True
2020-12-01 False
2021-01-01 True
2021-01-01 True
2021-01-01 False
2021-02-01 True
2021-02-01 True
2021-03-01 False
Name: realtime_start, dtype: bool

现在使用上面的 bool 掩码屏蔽 value 列中的值,然后将此屏蔽列分组到 level=0 并使用 last 聚合以选择每个唯一的最后一行编号

>>> last

date
2020-11-01 NaN
2020-12-01 142764.0
2021-01-01 142582.0
2021-02-01 142669.0
2021-03-01 143204.0
Name: value, dtype: float64

从计算的last_val 列中减去first 数据框中的value 列以计算MoM 变化

>>> mom_change

date MoM change
0 2020-11-01 NaN
1 2020-12-01 -140.0
2 2021-01-01 49.0
3 2021-02-01 379.0
4 2021-03-01 916.0

PS:数据框必须在 date 列排序,以便此解决方案正常工作

关于python - 计算年份数据的逐月和逐年变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67155907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com