2014-10-15 3 views
2

Есть ли более элегантный способ достичь этого? мое текущее решение, основанное на различных StackOverflow ответов заключается в следующемPandas Dataframe cumsum by row in reverse column order?

df = pds.DataFrame([[11,12,13,14],[15,16,17,18]], columns = [0,1,2,3]) 
print df 
dT = df.T 
dT.reindex(dT.index[::-1]).cumsum().reindex(dT.index).T 

Выход

df is: 
    0 1 2 3 
0 11 12 13 14 
1 15 16 17 18 

after by row reverse cumsum 
    0 1 2 3 
0 50 39 27 14 
1 66 51 35 18 

я должен выполнить это часто на моих данных (гораздо больший размер также), и попытаться разузнать короткий/лучший способ добиться этого.

Благодаря

ответ

4

Вот немного более читаемым альтернатива:

df[df.columns[::-1]].cumsum(axis=1)[df.columns] 

Там нет необходимости переставлять вашу DataFrame; просто используйте аргумент axis=1 для cumsum.

Очевидно, что проще всего просто хранить столбцы DataFrame в обратном порядке, но я предполагаю, что есть причина, по которой вы этого не делаете.

+0

Спасибо за упрощение. действительно, мне нужно сделать как кумуляцию вперед, так и обратную кумуляцию, а также сохранить исходный порядок столбцов для других частей анализа. – user3287545