【发布时间】:2020-07-23 08:56:05
【问题描述】:
我有这样的DataFrame:
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:
起始DataFrame:
- 第一列是合同 ID;
- 第二列是日期;
- 第三列是预付款系数 (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 at first date 分别等于 0 和 Debt at。
我尝试使用 apply 来解决此类任务。但是我没有成功,因为我需要使用以前计算的值。 这个答案对我没有帮助Is there a way in Pandas to use previous row value in dataframe.apply when previous value is also calculated in the apply? 因为我有数百个 id。
我将不胜感激。
【问题讨论】:
标签: python pandas lambda iteration apply