根据特定的过滤条件,在嵌套的for循环中创建多个数据表

2024-05-14 09:09:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有证券的主要原始数据,从中我需要创建基于特定过滤标准的多个证券投资组合。我已经习惯了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个数据帧。在

这些数据帧可以用于后验测试

任何帮助都将不胜感激。谢谢


Tags: 数据namegtfalse区域for原始数据证券
2条回答

您可以使用字典来存储数据帧。这还有一个额外的好处,即启用O(1)查找和分组相关数据。您不需要为此使用嵌套循环,可以将dict+groupby与输入数据帧df一起使用:

dfs = dict(tuple(df.groupby(['yr', 'region']))

这将创建一个字典dfs,将“yr”和“region”的每个组合映射到一个数据帧。您可以通过d[(2010, 1)]访问2010年和区域1的数据帧。在

现在要修改您的数据帧,您可以像任何其他字典一样简单地迭代您的字典:

^{pr2}$

注意,我已经创建了字典ETOPPTOPQTOP来存储结果数据帧,每个字典都由相同的('yr', 'region')键结构索引。通过这种方式,您可以轻松地访问、修改或组合任何特定组合的结果。在

for k, v in df.groupby(['yr', 'region']):
    print(v)

相关问题 更多 >

    热门问题