【发布时间】:2018-07-26 19:09:26
【问题描述】:
我有证券的主要原始数据,我需要根据某些过滤标准创建多个证券投资组合。我习惯用 C++ 工作,不太清楚如何在 python 中实现以下内容。
我尝试使用嵌套的 for 循环制作不同的数据框:
i - 用于循环从 2007 年到 2017 年(原始数据中的第 yr 列)
j - 用于循环从 1 到 4 的区域(原始数据中的列区域)
for i in range (2007, 2018):
for j in range (1,5):
dfij_filter = (df['yr'] == i) & (df['Region'] == j)
dfij = dfij[dfij_filter]
dfij = dfij.join(dfco.groupby('ISSUER_NAME')['E_SCORE'].mean(), on = 'ISSUER_NAME', rsuffix = '_ry')
dfij = dfij.join(dfco.groupby('ISSUER_NAME')['P_SCORE'].mean(), on = 'ISSUER_NAME', rsuffix = '_ry')
dfij = dfij.join(dfco.groupby('ISSUER_NAME')['Q_SCORE'].mean(), on = 'ISSUER_NAME', rsuffix = '_ry')
dfij = dfij.drop_duplicates(subset['ISSUER_NAME'], keep=False)
dfij_E = dfij.sort_values('E_SCORE_ry', ascending = False)
dfij_ETOP = dfij_E.iloc[:50, :]
dfij_P = dfij.sort_values('P_SCORE_ry', ascending = False)
dfij_PTOP = dfij_P.iloc[:50, :]
dfij_Q = dfij.sort_values('E_SCORE_ry', ascending = False)
dfij_QTOP = dfij_Q.iloc[:50, :]
我需要创建不同的数据帧,然后在这些数据帧上应用几个函数: 本质上,流程是: 第 1 步:年份过滤器 --> 第 2 步:区域过滤器 --> 第 3 步:计算该年份和地区的平均 E 分值、平均 P 分值、平均 Q 分值 -->(E、P、Q 是不同的列) 第四步:按平均E值降序排列证券--> 第 5 步:挑选前 50 名证券并将它们放入数据框中
对 P 和 Q 分数也重复第 4 步和第 5 步。
本质上是创建 10*4*3 的数据帧。
这些数据框随后可用于回测目的
任何帮助将不胜感激。谢谢
【问题讨论】:
-
什么不起作用/需要修复?
-
感谢您的回复约尔格。我不知道如何在嵌套的 for 循环中创建数据框。在上面的代码中,我无法动态创建名称为 dfij 的数据帧(例如,--> df20071)。我知道这可以在字典中完成,但我不确定这里是如何工作的。
标签: python python-3.x pandas dataframe nested