Как использовать предыдущее значение строки в кадре данных pandas, когда предыдущее значение также рассчитывается с помощью данных группы - PullRequest
4 голосов
/ 10 апреля 2020

У меня есть такой DataFrame:

enter image description here

df = pd.DataFrame({'id': [111,111,111, 222,222,222],\
                   'Date': ['30.04.2020', '31.05.2020', '30.06.2020', \
                            '30.04.2020', '31.05.2020', '30.06.2020'],\
                   'Debt': [100,100,70, 200,200,200] , \
                   'Ear_coef': [0,0.2,0.2, 0,0,0.3]}) 
df['Date'] = pd.to_datetime(df['Date'] ) 
df['Contract'] = pd.DataFrame(df.groupby(['id']).apply(lambda x: x.Debt - x.Debt.shift(1))).reset_index().Debt
# df.groupby(['id']).
df 

Мне нужно получить такой DataFrame:

enter image description here

Начальный кадр данных:

  • первый столбец - идентификатор контракта;
  • второй столбец - дата;
  • третий столбец - коэффициент предоплаты (EAR);
  • 4-й столбец - контрактный платеж;

Результирующий кадр данных:

  • 5-й столбец EAR. Он равен Ear_coef (t) * Debt_with_EAR (t-1)
  • 6-й столбец - это Debt_with_EAR. Это равняется Debt_with_EAR (t-1) + Contract (t) + EAR (t)

Ear и Debt_with_EAR на первую дату равняется 0 и Debt в соответственно.

Я пытался решить такую ​​задачу с приложением. Но я не добился успеха, так как мне нужно использовать предыдущее значение, которое также рассчитывается. Эти ответы мне не помогают Есть ли способ в Pandas использовать предыдущее значение строки в dataframe.apply, когда предыдущее значение также вычисляется в apply? , поскольку у меня есть сотни id.

Буду благодарен за помощь.

1 Ответ

1 голос
/ 10 апреля 2020

Вы ищете .shift().

Однако он не поддается легко для .apply(). Обходной путь будет:

df['EAR'] = df['EAR_coef'] * df['Debt with EAR'].shift(1)

. Для последнего столбца вам может понадобиться .rolling(), но я не уверен в вашей формуле? Это кажется бесконечным.

...