让我们说我有这样的数据
df = pd.DataFrame({"MONTHS":[1,2,3,4,5,6], "METRIC":[430,584,648,571,610,535]})
df = pd.DataFrame({“ MONTHS”:[1,2,3,4,5,6],“ METRIC”:[430,584,648,571,610,535]}) 我想做的就是找到指标列的总和= 3378
MONTHS METRIC MONTHS NEW_METRIC NEW_METRIC
1 430 0 3378 sum of METRIC
2 584 1 3378 sum of METRIC
3 648 --> 2 2948 explain previous value-lag of metric(3378-430)
4 571 3 2364 previous value-lag of metric(2948-584)
5 610 4 1716 =2364-648
6 535 5 1145 =1716-571
6 535 =1145-535
因此,这里基本上创建了一个新行,添加了0,并且对应的新指标是总和,对于值1,它也是新指标的总和,但是从month = 2开始,它应该减去指标与前一行值的滞后值同样的列(3378-430)的第3个月,直到最后一个月(2948-584)的第4个月是(2364-648)等。我使用了以下代码。
df["METRIC"].sum() - df["METRIC"].reindex(np.arange(0, 7)).shift(2).fillna(0)
但我希望将前两个值相加,但稍后应使用前一个值-df [“ METRIC”]。reindex(np.arange(0,7))。shift(2).fillna(0) 。从第3个月起,新指标将失效,因为我需要使用以前的值而不是指标总和。我该如何纠正?
答案 0 :(得分:0)
您可以减去累计和。
df.METRIC.sum() - df.METRIC.reindex(np.arange(df.shape[0]+1)).shift(2).cumsum().fillna(0)
0 3378.0
1 3378.0
2 2948.0
3 2364.0
4 1716.0
5 1145.0
6 535.0
Name: METRIC, dtype: float64