Как получить совокупный рост в pandas с учетом темпов роста и специальных правил? - PullRequest
2 голосов
/ 07 марта 2020

У меня есть этот фрейм данных:

date    amount
2018/01 100
2018/02 105
2018/03 110.25
2018/04 200

Как видите, каждый месяц сумма увеличивается на 5% от предыдущего значения. Однако каждый 4-й месяц (2018/04) это правило не применяется. Вместо этого он должен превышать постоянное значение, например, 200.

Как мне запрограммировать это в pandas dataframe?

1 Ответ

2 голосов
/ 07 марта 2020

@ Lroy_12374 Не ясно, что произойдет через 5-8 месяцев и более, что повлияет на то, как писать логи c. Например: а) Должен ли месяц 5 быть на 5% выше, чем месяц 3? ИЛИ b) должно ли оно быть на 5% выше, чем каждый четвертый месяц (т. Е. Апрель 2018 года, август 2018 года, декабрь 2018 года, апрель 2019 года, август 2019 года, декабрь 2019 года и т. Д. c.)? ИЛИ c) Если он будет на 5% выше, чем месяц 4, если месяц 4 не был константой, это означает, что месяц 5 равен 1,05 ^ 2 * (месяц 3).

Кроме того, определение константы непонятно. Буквально, это будет 200 или что-то за каждый четвертый месяц? Или это будет другое число, которое не соответствует образцу других 3 месяцев.

Я написал код для сценария c) выше:

import pandas as pd
import numpy as np
df = pd.DataFrame({'date' : ['2018/01','2018/02','2018/03', 
'2018/04','2018/05','2018/06','2018/07', '2018/08']})
start_amount = 100
constant=200
growth=.05
df['amount'] = np.where((df.index+1)%4 != 0,
                        start_amount * (1+growth) ** df.index, constant)
df

Ключ здесь нужно использовать np.where и реализовать logi c на основе номера строки, который вы можете получить с помощью df.index . В приведенном выше коде я добавляю 1 к строке (df.index + 1) , поскольку python начинает отсчет с 0, и вы хотите logi c на основе четвертого месяца. Затем я использую символ%, который возвращает остаток после деления, который вы хотите равным нулю, если это четвертая строка (т.е. 4/4 = остаток 0). Таким образом, в основном, когда что-то находится не в каждой четвертой строке, вы хотите умножить на 1,05 (увеличение на 5%) RAISED в соответствии с номером строки, а где это четвертая строка, вы хотите вернуть константу.

I надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...