在达到阈值并保留第一个值后将累积值设置为常量

时间:2018-02-01 22:38:11

标签: python-3.x pandas

我有一个大熊猫时间序列,其中包含累计月度值。

如果在特定日期的一个月内,该值小于某个数字,我会保留第一个并将所有内容设置为每月剩余的1000个。

E.g。

df:

 Date       cummulative_value
1/8/2017    -3
1/9/2017    -6
1/10/2017   -72
1/11/2017   500
1/26/2017   575
2/7/2017    -5
2/14/2017   -6
2/21/2017   -6

我的截止值是-71所以在上面的示例中我需要实现以下内容:

 Date       cummulative_value
1/8/2017    -3
1/9/2017    -6
1/10/2017   -72
1/11/2017   1000
1/26/2017   1000
2/7/2017    -5
2/14/2017   -6
2/21/2017   -6

1/10/2017 -72上累积值低于-71所以我们保留它,但2017年1月剩余时间的每个值现在都设置为1000.

当满足条件时,此solution将所有值设置为1000。我需要保留第一个值。

1 个答案:

答案 0 :(得分:1)

这感觉有点笨拙......我并不为此感到骄傲。但它可以为您的数据集工作。

df['cummulative_value'] = (df.groupby(df['Date'].dt.strftime('%Y%m'))['cummulative_value']
                            .transform(lambda x: np.where(x.ge(-71).cumprod()
                            .shift(1).fillna(1),x,1000)))

输出:

        Date  cummulative_value
0 2017-01-08                 -3
1 2017-01-09                 -6
2 2017-01-10                -72
3 2017-01-11               1000
4 2017-01-26               1000
5 2017-02-07                 -5
6 2017-02-14                 -6
7 2017-02-21                 -6