我有一个大熊猫时间序列,其中包含累计月度值。
如果在特定日期的一个月内,该值小于某个数字,我会保留第一个并将所有内容设置为每月剩余的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。我需要保留第一个值。
答案 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