2017-06-14 96 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

绝对,谢谢! –