我的代码目前如下所示:
df_1 = portfolio_all[0].rename(columns={'Close': 'Close_1'} )
df_2 = portfolio_all[1].rename(columns={'Close': 'Close_2'} )
df_3 = portfolio_all[2].rename(columns={'Close': 'Close_3'} )
df_4 = portfolio_all[3].rename(columns={'Close': 'Close_4'} )
df_5 = portfolio_all[4].rename(columns={'Close': 'Close_5'} )
df_1['daily_return_1'] = df_1['Close_1'].pct_change(1)
df_2['daily_return_2'] = df_2['Close_2'].pct_change(1)
df_3['daily_return_3'] = df_3['Close_3'].pct_change(1)
df_4['daily_return_4'] = df_4['Close_4'].pct_change(1)
df_5['daily_return_5'] = df_5['Close_5'].pct_change(1)
df_1['perc_ret_1'] = (1 + df_1.daily_return_1).cumprod() - 1
df_2['perc_ret_2'] = (1 + df_2.daily_return_2).cumprod() - 1
df_3['perc_ret_3'] = (1 + df_3.daily_return_3).cumprod() - 1
df_4['perc_ret_4'] = (1 + df_4.daily_return_4).cumprod() - 1
df_5['perc_ret_5'] = (1 + df_5.daily_return_5).cumprod() - 1
有没有一种方法可以在 for 循环或类似的循环中动态创建这些数据帧,而不必将每个数据帧编写为一行代码?
最佳答案
您可以使用简单的 python for-loop
进行创建,并通过 list
进行枚举
import pandas as pd
portfolio_all = [df1, df2, df3, df4, df5]
for i, df in enumerate(portfolio_all):
column_name = f'Close_{i+1}'
df.rename(columns={'Close': column_name}, inplace=True)
df[f'daily_return_{i+1}'] = df[column_name].pct_change(1)
df[f'perc_ret_{i+1}'] = (1 + df[f'daily_return_{i+1}']).cumprod() - 1
假设您将所有数据帧作为列表。
这样,您就可以避免为每个 DataFrame 重复相同的代码,并且它应该适用于 portfolio_all
列表中任意数量的 DataFrame。
希望这有帮助!
关于python - 如何使用 for 循环动态创建数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77209153/