2017-06-14 67 views
2

我有一個通常形式的數據框看起來像這樣。從右邊開始的累積總和

A B C 
0 1 2 3 
1 2 4 6 
2 3 5 7 

我想創建另一個數據幀,其中每個值是沿着值的行累計和原數據幀,從右側開始,而不是左 - 即輸出應該像這樣:

A B C 
0 6 5 3 
1 12 10 6 
2 ... 

任何人都可以建議一點代碼來做到這一點?

+3

沒有你寫詢問的聲音令人振奮之前的一些笨拙的代碼的前景?畢竟這是一個有趣的任務 –

+0

@Shan - 如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael

回答

4

使用ilocreversing值的兩倍:

df = df.iloc[:, ::-1].cumsum(axis=1).iloc[:, ::-1] 
print (df) 
    A B C 
0 6 5 3 
1 12 10 6 
2 15 12 7 

#first reverse values 
print (df.iloc[:, ::-1]) 
    C B A 
0 3 2 1 
1 6 4 2 
2 7 5 3 

#then use function cumsum 
print (df.iloc[:, ::-1].cumsum(axis=1)) 
    C B A 
0 3 5 6 
1 6 10 12 
2 7 12 15 

#last reverse back 
print (df.iloc[:, ::-1].cumsum(axis=1).iloc[:, ::-1]) 

    A B C 
0 6 5 3 
1 12 10 6 
2 15 12 7 
+0

你能解釋一下這是如何工作的嗎? –

+0

@ Ev.Kounis - 可以嗎? – jezrael

+0

絕對,謝謝! –