2017-08-05 74 views
3

給定一個數據幀如何在熊貓中同時執行'n`行的總和?

 A 
0 14 
1 59 
2 38 
3 40 
4 99 
5 89 
6 70 
7 64 
8 84 
9 40 
10 30 
11 94 
12 65 
13 29 
14 48 
15 26 
16 80 
17 79 
18 74 
19 69 

該數據幀具有20列。我想一次對n=5行進行分組並總結起來。所以,我的輸出應該是這樣的:

 A 
0 250 
1 347 
2 266 
3 328 

df.rolling_sum不會幫助,因爲它不會讓你總結的時候改變步幅。

還有什麼其他方法可以做到這一點?

+1

之前盲目downvoting,請閱讀:[副本可以作爲一個路標,引導用戶到另一個問題有用的答案。(https://開頭計算器。 blog/2009/05/20/linking-duplicate-questions /)問一個被標記爲重複的問題沒有任何問題。 –

+1

同意。另外,這不是完全重複的。它足夠接近,我不會撤消dup標誌。但你的問題總和。另一個人詢問平均水平。不同的人會想到尋找不同的東西。如果你的問題的表述方式最終會引導更多人回答他們需要的答案,那麼你提出了一個有用的問題,即使它是重複的。 – piRSquared

+1

我也加了我對這個問題的回答 – piRSquared

回答

4
df.set_index(df.index // 5).sum(level=0) 
+0

哦,這是新的。不知道水平...很酷... –

2

假設您的索引是連續的,您可以在df.index上執行整數除法,然後按索引進行分組。

對於上述df,你可以這樣做:

In [447]: df.index // 5 
Out[447]: Int64Index([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3], dtype='int64') 

獲得最終的答案只是一個步驟,使用df.groupbydfGroupBy.sum

In [448]: df.groupby(df.index // 5).sum() 
Out[448]: 
    A 
0 250 
1 347 
2 266 
3 328 

如果你沒有一個RangeIndex做先使用df.reset_index,然後再使用組。

2

如果你可以管理與相對於一個系列的款項的ndarray(你總是可以重新構建一系列無論如何),你可以使用np.add.reduceat

np.add.reduceat(df.A.values, np.arange(0, df.A.size, 5)) 

在這種情況下返回

array([250, 347, 266, 328])