1. 程式人生 > >python- pandas cumsum用法

python- pandas cumsum用法

Cumsum :計算軸向元素累加和,返回由中間結果組成的陣列

第一部分:求累計次數(轉自https://blog.csdn.net/qq_22238533/article/details/72900634)

本文主要是針對 cumsum函式的一些用法。具體應用場景看下面的資料集。


第一列是userID,第二列是安裝的時間,第三列是安裝的次數。

我們現在想做一件事情。就是統計使用者在某一天前累計的安裝次數。

譬如,對userID為20的使用者,問在16天前,其安裝次數為多少? 答案應該是4次。用python的實現也很簡單。

又譬如,userID為44在19天前安裝的次數,那就應該是1+3+1+1=6次。

具體程式碼:(假設資料集為data)

由於是針對每個userID,所以是需要將userID劃分一下(這個方法在組內排序的時候有提到,可以參考前面的文章)。

所以才有下面這一句

groupby(['userID']) 

然後,分完組後需要統計的Times,所以就是下面這一句

data['Times'].groupby(['userID'])

最後,我們需要的是累加量,所以,用cumsum()這個函式。

data['sum_Times']=data['Times'].groupby(['userID']).cumsum()

用得到的結果放在一列。

最後得到結果如下:


可以從sum_Times這列看到,每一個值都是相應userID在前一行的累加值。

第二部分:返回由中間結果組成的陣列

(轉自 https://blog.csdn.net/yuansuo0516/article/details/78331568)定義一個2*2*3的陣列,所以其shape是2,2,3,索引分別0,1,2
shape索引
20
21
32
import numpy as np  
arr  = np.array([[[1,2,3],[8,9,12]],[[1,2,4],[2,4,5]]])   
print(arr.cumsum(0))  
print(arr.cumsum(1))  
print(arr.cumsum(2))
輸出結果:
#cumsum(0)  
[[[ 1  2  3]  
  [ 8  9 12]]  
 [[ 2  4  7]  
  [10 13 17]]]  
#cumsum(1)  
[[[ 1  2  3]  
  [ 9 11 15]]  
 [[ 1  2  4]  
  [ 3  6  9]]]  
#cumsum(2)  
[[[ 1  3  6]  
  [ 8 17 29]]  
 [[ 1  3  7]  
  [ 2  6 11]]]  
註釋:arr是一個2*2*3三維矩陣,索引值為0,1,2cumsum(0):實現0軸上的累加:以最外面的陣列元素為單位,以[[1,2,3],[8,9,12]]為開始實現後面元素的對應累加cumsum(1):實現1軸上的累加:以中間陣列元素為單位,以[1,2,3]為開始,實現後面元素的對應累加cumsum(2):實現2軸上的累加:以最裡面的元素為累加單位,即1為開始,實現後面的元素累加四維陣列實現下面看一個四維陣列2*2*2*4,索引值為0,1,2,3
import numpy as np  
arr  = np.arange(32).reshape((2,2,2,4))  
print(arr)  
print(arr.cumsum(0))  
print(arr.cumsum(1))  
print(arr.cumsum(2))  
print(arr.cumsum(3)) 
arr:  ##  arr是一個2*2*2*4四維矩陣,索引值為0,1,2,3 
[[[[ 0  1  2  3]  
   [ 4  5  6  7]]  
  [[ 8  9 10 11]  
   [12 13 14 15]]]  
 [[[16 17 18 19]  
   [20 21 22 23]]  
  [[24 25 26 27]  
   [28 29 30 31]]]]  
cumsum(0):實現0軸上的累加即:以最外面陣列元素為單位即以下兩個的對應位置元素相加起來
[[[ 0  1  2  3]  
   [ 4  5  6  7]]  
  [[ 8  9 10 11]  
   [12 13 14 15]]] 
[[[16 17 18 19]  
   [20 21 22 23]]  
  [[24 25 26 27]  
   [28 29 30 31]]]] 
結果:
[[[[ 0  1  2  3]  
   [ 4  5  6  7]]  
  [[ 8  9 10 11]  
   [12 13 14 15]]]  
 [[[16 18 20 22]  
   [24 26 28 30]]  
  [[32 34 36 38]  
   [40 42 44 46]]]]  
cumsum(1):實現1軸上的累加即:以次外面元素為單位,累加以下四個
[[ 0  1  2  3]  
   [ 4  5  6  7]] 

[[ 8  9 10 11]  
 [12 13 14 15]]  

[[16 17 18 19]  
   [20 21 22 23]] 

[[24 25 26 27]  
   [28 29 30 31]]  
累計過程產生的中間結果要記錄到陣列中,所以,結果:
[[[[ 0  1  2  3]  
   [ 4  5  6  7]]  
  [[ 8 10 12 14]            
   [16 18 20 22]]]  
 [[[16 17 18 19]  
   [20 21 22 23]]  
  [[40 42 44 46]  
   [48 50 52 54]]]] 
cumsum(2)就對應從[ 0  1  2  3]陣列元素開始實現累加,然後記錄中間結果cumsum(3)對應的是從最裡面最小的陣列元素,即從0開始實現累加,記錄中間結果