Създайте времеви редове от данни

Имам рамка от данни, която съдържа информация за неизпълнения в кредитен портфейл и времето от началото, от което е настъпило. Всяко „наблюдение“ е двойка, представляваща времето t в дни и размера на неизпълнението на кредита:

df['time_to_default']  #  Time from origination to default
df['default_amnt']     #  The loan amount defaulted

Бих искал да създам поредица, която представлява кумулативното количество неизпълнение за всеки даден момент t. (Да приемем, че time_to_default се дели равномерно на t). Не мога да разбера как да създам нов елемент от dataframe, да присвоя първоначалната стойност на 0 и след това да повторя серията....


person GPB    schedule 04.06.2015    source източник
comment
Съжалявам, но питате как просто да добавите индексна колона? като df['new_col'] = np.arange(len(df))?   -  person EdChum    schedule 04.06.2015
comment
@EdChum - не точно. 'new_col' ще бъде попълнен като функция от съдържанието на предишния ред, напр. df ['new_col'] = f( df['time_to_default'][t-1], df['default_amt][t-1]), където t е индексът на серията. Не съм сигурен кой е най-питоничният начин за позоваване на това. PS - Това е рамка с данни, мога ли да използвам np?   -  person GPB    schedule 04.06.2015
comment
Да, можете да използвате функции numpy   -  person EdChum    schedule 04.06.2015
comment
Да, това създаде сериал. Но вижте въпроса ми - кой е най-добрият начин да проектирате метод за запълване на серията чрез рекурсивна препратка към други функции в df?   -  person GPB    schedule 04.06.2015


Отговори (1)


Изглежда, че трябва да използвате groupby за това заедно с cumsum, тъй като искате обща сума:

cum_defaults = df.groupby('time_to_default').default_amnt.sum().cumsum()

След това трябва да преиндексирате тази нова серия, за да попълните всички липсващи дни:

cum_defaults = cum_defaults.reindex(index=range(min(cum_defaults.index),
                                                max(cum_defaults.index) + 1), 
                                    method='ffill')

С някои примерни данни:

df = pd.DataFrame({'time_to_default': [1, 3, 3, 6], 
                   'default_amnt': [10, 20, 30, 40]})
>>> cum_defaults
time_to_default
1     10
2     10
3     60
4     60
5     60
6    100
Name: default_amnt, dtype: int64
person Alexander    schedule 05.06.2015