Моя задача - рассчитать совокупный основной капитал. Используя numpy.ppmt, он дает только оплаченный основной счет за конкретный месяц, поэтому я хочу добавить столбцы, которые содержат ежемесячный основной размер для каждой записи, а затем взять сумму, чтобы получить совокупный основной размер.
Например, у меня датафрейм выглядит следующим образом:
frame = pd.DataFrame({'rate':[0.1, 0.1], 'per':[2, 4], 'nper':[360, 360], 'pv':[100000, 200000]})
max_per = frame['per'].max()
columns = ['principal%s'%i for i in range(1, max_per + 1)]
df = pd.DataFrame(index=frame.index, columns=columns, dtype='float').fillna(0)
for index, column in enumerate(columns):
df[column] = -np.ppmt(rate=frame['rate'] / 100 / 12, per=index + 1, nper=frame['nper'],
pv=frame['pv'], when=when)
frame.join(df)
Фрейм данных будет выглядеть следующим образом:
nper per pv rate epp principal1 principal2 principal3 \
0 360 2 100000 0.1 547.309838 273.643517 273.666321 273.689126
1 360 4 200000 0.1 2189.421796 547.287034 547.332642 547.378253
principal4
0 273.711934
1 547.423868
Проблема в том, что для записи один, принципал 3 и принципал 4 должны быть равны 0. Один из обходных путей - это вычисление суммы суммы принципала1-принципала4 на основе столбца per, например, если frame.per == 2, тогда я только суммирую принципал1 и принципал 2, а если frame.per == 4, то я суммирую только сумму от принципала1 до принципала4. Любая помощь, чтобы сделать это.
Я могу рассчитать совокупный принципал, вызвав apply, но я не хочу этого делать, потому что он медленный.
Спасибо.