python - 如何使用 for 循环动态创建数据帧

标签 python pandas dataframe

我的代码目前如下所示:

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/

相关文章:

python - Pandas 部分转置

对数据框的某些部分运行回归并提取估计值 + 错误

r - 检查每行右侧的列是否具有特定值

python - 遵循层次结构的多个嵌套字典

python - 如何在特定范围内增加列表中的值

Python:*= 是什么意思?

python - 如何阻塞主线程直到所有其他线程执行完毕?

设置排序顺序的 Pythonic 方式?

python - 堆叠数据框并排名

python - pandas 取某些行的平均值,同时保持其他行不变