熊猫插入第一行并加上一列的总和,然后使用列

时间:2019-05-31 18:35:46

标签: pandas

让我们说我有这样的数据

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个月起,新指标将失效,因为我需要使用以前的值而不是指标总和。我该如何纠正?

1 个答案:

答案 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