python- pandas cumsum用法
阿新 • • 發佈:2019-01-25
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在前一行的累加值。
第二部分:返回由中間結果組成的陣列
shape | 索引 |
2 | 0 |
2 | 1 |
3 | 2 |
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))
註釋: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輸出結果: #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]]]
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開始實現累加,記錄中間結果