IIUC, вам нужно рекурсивно добавить интерес к текущему значению?
Я предполагаю, что df будет содержать процентную ставку и банки,
и что у df2 будет дата начала.
тогда мы могли бы сделать декартово произведение, чтобы создать новыйЗатем df примените цикл для работы со строками.
# cartesian product.
df3 = (
df.assign(key=1)
.merge(df2.assign(key=1), on="key")
.drop("key", axis=1)
)
#Get indices of first instance of each bank. Assuming your data is ordered by datetime.
indices = df3.drop_duplicates(subset='Bank',keep='first').index.tolist()
# calculate the first interest value.
df3.loc[indices,'Value'] = value + (value * (df3['Rate_1Y%'] / 100))
# Calculate the rest of the data frame.
for i in range(1, len(df3)):
df3.loc[i, 'Value'] = df3.loc[i-1, 'Value'] + (df3.loc[i-1, 'Value'] * (df3.loc[i, 'Rate_1Y%'] / 100))
print(df3)
Bank Rate_1Y% Date Value
0 Bank of America 2.00 2010-12-31 10200.000000
1 Bank of America 2.00 2011-12-31 10404.000000
2 Bank of America 2.00 2012-12-31 10612.080000
3 Bank of America 2.00 2013-12-31 10824.321600
4 Bank of America 2.00 2014-12-31 11040.808032
5 Bank of America 2.00 2015-12-31 11261.624193
6 Bank of America 2.00 2016-12-31 11486.856676
7 Bank of America 2.00 2017-12-31 11716.593810
8 Bank of America 2.00 2018-12-31 11950.925686
9 Bank of America 2.00 2019-12-31 12189.944200
как функцию, не стесняйтесь изменять редактирование в соответствии со своими потребностями.
def calc_interest(dataframe_1, dataframe_2, col_name='Rate_1Y%'):
df3 = (
dataframe_1.assign(key=1)
.merge(dataframe_2.assign(key=1), on="key")
.drop("key", axis=1)
)
indices = df3.drop_duplicates(subset='Bank',keep='first').index.tolist()
df3.loc[indices,'Value'] = value + (value * (df3[col_name] / 100))
for i in range(1, len(df3)):
df3.loc[i, 'Value'] = df3.loc[i-1, 'Value'] + (df3.loc[i-1, 'Value'] * (df3.loc[i, 'Rate_1Y%'] / 100))