我有证券的主要原始数据,从中我需要创建基于特定过滤标准的多个证券投资组合。我已经习惯了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:Yr过滤器-->; 步骤2:区域过滤器-->; 第3步:计算该年度和地区的平均E分数值、平均P分数值、平均Q分数值-->;(E、P、Q是不同的列) 第四步:按平均E分的降序排列证券-->; 第五步:挑选前50名的证券并将它们放入数据框中
重复步骤4和5以获得p和Q分数。在
基本上创建10*4*3个数据帧。在
这些数据帧可以用于后验测试
任何帮助都将不胜感激。谢谢
您可以使用字典来存储数据帧。这还有一个额外的好处,即启用O(1)查找和分组相关数据。您不需要为此使用嵌套循环,可以将
dict
+groupby
与输入数据帧df
一起使用:这将创建一个字典
dfs
,将“yr”和“region”的每个组合映射到一个数据帧。您可以通过d[(2010, 1)]
访问2010年和区域1的数据帧。在现在要修改您的数据帧,您可以像任何其他字典一样简单地迭代您的字典:
^{pr2}$注意,我已经创建了字典
ETOP
、PTOP
、QTOP
来存储结果数据帧,每个字典都由相同的('yr', 'region')
键结构索引。通过这种方式,您可以轻松地访问、修改或组合任何特定组合的结果。在相关问题 更多 >
编程相关推荐