Создание временного ряда из данных

У меня есть кадр данных, который содержит информацию о дефолтах в кредитном портфеле и времени с момента его возникновения. Каждое «наблюдение» представляет собой пару, представляющую время 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