2015-06-18 2 views
3

Давайте предположим, что у меня есть панд dataframe ДФА следующим образом:Попытки создать новый dataframe основанный на внутренних суммах столбца из другого dataframe с помощью Python/панд

df = DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8]}) 

    Col1 Col2 
0  1  5 
1  2  6 
2  3  7 
3  4  8 

Есть ли способ для меня, чтобы изменить столбец в сумму всех следующих элементов в столбце?

Например, для 'Col1' результат был бы:

Col1 Col2 
0  10  5 
1  9  6 
2  7  7 
3  4  8 

1 становится равным 1 + 2 + 3 + 4 = 10
2 становится 2 + 3 + 4 = 9
3 становится 3 + 4 = 7
4 остается 4

Если это возможно, есть ли способ указать индекс отсечения, после которого это поведение будет иметь место? Например, если отрезанный индекс будет ключ 1, то результат будет:

Col1 Col2 
0  1  5 
1  2  6 
2  7  7 
3  4  8 

Я имею в виду, что нет другого пути, чем использование петель, чтобы сделать это, но я думал, что может быть способом с помощью векторизованного расчеты.

Благодаря осыпает

ответ

1

Вот один из способов избежать петли.

import pandas as pd 

your_df = pd.DataFrame({'Col1':[1,2,3,4], 'Col2':[5,6,7,8]}) 

def your_func(df, column, cutoff): 
    # do cumsum and flip over 
    x = df[column][::-1].cumsum()[::-1] 
    df[column][df.index > cutoff] = x[x.index > cutoff]  
    return df 

# to use it 
your_func(your_df, column='Col1', cutoff=1) 

Out[68]: 
    Col1 Col2 
0  1  5 
1  2  6 
2  7  7 
3  4  8 
1

Да, вы могли бы использовать цикл, но очень дешевый:

def sum_col(column,start=0): 
    l = len(column) 
    return [column.values[i:].sum() for i in range(start,l)] 

и использование:

data['Col1'] = sum_col(data['Col1'],0) 
Смежные вопросы