Я пытаюсь сгенерировать фрейм данных с двумя столбцами: «дата» и «сумма». Дата идет с 2018-01 по 2020-12, однако столбец «сумма» должен быть заполнен на основе следующего правила:
(1). Если дата находится между 2018/01 и 2019/01, то примите начальное значение 1000 и для любых последующих строк умножьте предыдущее значение на 1,06.
(2). Если дата находится между «2019/02» и «2020/01», то в качестве начального значения примите последнее значение (1.), и для любых последующих строк умножьте предыдущее значение на 1,04.
(3). Если дата находится между> 2020/01, то в качестве начального значения примите последнее значение (2.) и для всех последующих строк умножьте предыдущее значение на 1,02.
Мой код выглядит следующим образом:
df['amount'] =
np.where((df['date']>='2018/01') & (df['date']<='2019/01'),
1000 * (1+g_2018) ** df.index,
np.where( (df['date']>='2019/02') & (df['date']<='2020/01'),
int(df.loc[df['date'] == '2019/01', 'amount'].iloc[0]) * (1+g_2019) ** (df.index-12),
np.where( (df['date']>='2020/02'),
int(df.loc[df['date'] == '2020/01', 'amount'].iloc[0]) * (1+g_2020) ** (df.index-24),
False
)))
Вывод применяется только первое правило (1.), но игнорирует остальные. Таким образом, он заполняет только строки 0-12, а затем все последующие значения равны 0 ... почему?
date amount
0 2018/01 1000.000000
1 2018/02 1060.000000
2 2018/03 1123.600000
3 2018/04 1191.016000
4 2018/05 1262.476960
5 2018/06 1338.225578
6 2018/07 1418.519112
7 2018/08 1503.630259
8 2018/09 1593.848075
9 2018/10 1689.478959
10 2018/11 1790.847697
11 2018/12 1898.298558
12 2019/01 2012.196472
13 2019/02 0.000000
14 2019/03 0.000000...