gpt4 book ai didi

python - 如何使用 Pandas Rolling 显示随时间推移而降级的列值?

转载 作者:行者123 更新时间:2023-12-01 08:00:43 26 4
gpt4 key购买 nike

我有一个 future 预测值的数据框,我想显示该值随着时间的推移减少了指定的量。

我想从这里开始:

Group   Period  Value

A 1/1/2020 4.3

A 2/1/2020

A 3/1/2020

A 4/1/2020

A 5/1/2020

A 6/1/2020

A 7/1/2020

A 8/1/2020

A 9/1/2020

B 1/1/2020 6.5

B 2/1/2020

B 3/1/2020

B 4/1/2020

B 5/1/2020

B 6/1/2020

B 7/1/2020

B 8/1/2020

B 9/1/2020

对此:

Group   Period  Value

A 1/1/2020 4.3

A 2/1/2020 3.3

A 3/1/2020 2.3

A 4/1/2020 1.3

A 5/1/2020 0.3

A 6/1/2020 0

A 7/1/2020 0

A 8/1/2020 0

A 9/1/2020 0

B 1/1/2020 6.5

B 2/1/2020 5.5

B 3/1/2020 4.5

B 4/1/2020 3.5

B 5/1/2020 2.5

B 6/1/2020 1.5

B 7/1/2020 0.5

B 8/1/2020 0

B 9/1/2020 0

我已经使用起始位置的值创建了数据框(在本例中为 1/1/2020)。

有一次尝试。见下文。

group = df2.groupby(['region', 'site', 'product_ID'], as_index=False)

df2['Projected_S'] = group['Projected_S'].rolling(window=1).apply(lambda x: x.shift(1)-1)

最佳答案

IIUC,使用类似:

f=lambda x: np.where(x.ffill()-x.ffill().expanding().count()<0
,0,x.ffill()-x.ffill().expanding().count())
df.Value=df.groupby(df.Value.notna().cumsum())['Value'].transform(f)
print(df)
<小时/>
   Group    Period  Value
0 A 1/1/2020 3.3
1 A 2/1/2020 2.3
2 A 3/1/2020 1.3
3 A 4/1/2020 0.3
4 A 5/1/2020 0.0
5 A 6/1/2020 0.0
6 A 7/1/2020 0.0
7 A 8/1/2020 0.0
8 A 9/1/2020 0.0
9 B 1/1/2020 5.5
10 B 2/1/2020 4.5
11 B 3/1/2020 3.5
12 B 4/1/2020 2.5
13 B 5/1/2020 1.5
14 B 6/1/2020 0.5
15 B 7/1/2020 0.0
16 B 8/1/2020 0.0
17 B 9/1/2020 0.0

说明: df.Value.notna().cumsum() 从具有下一个有效值条目的行开始创建组。然后我们使用 .ffill() 向下填充值。然后使用expanding()我们获取计数,因此基本上它会减去扩展计数的值。

最后使用np.where()来检查哪里是负值并将其替换为0。:)

关于python - 如何使用 Pandas Rolling 显示随时间推移而降级的列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748117/

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