作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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/
我是一名优秀的程序员,十分优秀!