Рассчитать ежедневно из накопленной суммы - PullRequest
1 голос
/ 19 апреля 2020

Есть ли простой способ, который не требует ручного l oop для перевода ряда накопленных сумм в ряды ежедневных подсчетов? вид противоположности cumsum ()?

I have the following df
Day  CumSum  
Mon    1
Tue    4
Wed    8
Thu    16
Fri    25
Sat    32
Sun    43

Я хочу заполнить дополнительный столбец ежедневными значениями

Day   CumSum   Daily 
Mon     1      1      
Tue     4      3      
Wed     8      4      
Thu     16     8      
Fri     25     9      
Sat     32     7      
Sun     43     11     

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Вы можете использовать .diff() здесь, а затем заполнить NaN первой записи соответствующим значением в столбце CumSum:

df['Daily'] = df['CumSum']<b>.diff().fillna(df['CumSum'])</b>

Для данных данного примера, это дает нам:

>>> df
   Day  CumSum
0  Mon       1
1  Tue       4
2  Wed       8
3  Thu      16
4  Fri      25
5  Sat      32
6  Sun      43
>>> df['Daily'] = df['CumSum'].diff().fillna(df['CumSum'])
>>> df
   Day  CumSum  Daily
0  Mon       1    1.0
1  Tue       4    3.0
2  Wed       8    4.0
3  Thu      16    8.0
4  Fri      25    9.0
5  Sat      32    7.0
6  Sun      43   11.0
1 голос
/ 19 апреля 2020

Переверните существующий столбец накопленной суммы, чтобы он уменьшился, затем наберите на нем cumsum(), затем поверните его в обратном порядке, чтобы получить исходный заказ.

np.cumsum(x[::-1])[::-1] 
...