Python map() 函数输出到 Pandas DataFrame

2 投票
1 回答
5192 浏览
提问于 2025-04-17 08:04

我使用Python的map()函数来给一个交易模型传递参数,并输出结果。我用itertools.product来找出两个参数的所有可能组合,然后把这些组合传给一个叫“run”的函数。这个run函数会返回一个包含收益的pandas数据框。列标题是这两个参数的组合,以及收益的夏普比率。具体见下方:

def run((x,y)): 
    ENTRYMULT = x
    PXITR1PERIOD = y

    create_trade()
    pull_settings()    
    pull_marketdata()
    create_position()
    create_pnl_output()

    return DataFrame(DF3['NETPNL'].values, index=DF3.index, columns=[(ENTRYMULT,PXITR1PERIOD,SHARPE)])

我的main()函数使用Pool()功能来在所有8个核心上运行map():

if __name__ == '__main__':    
global DF3
pool = Pool()    
test1 =pool.map(run,list(itertools.product([x * 0.1 for x in range(10,12)], range(100,176,25))))
print test1

我意识到map函数只能输出列表。输出的是从返回的数据框中提取的列标题。我从print test1得到的输出看起来是这样的:

[(1.0, 150, -8.5010673966997263)
2011-11-17  18.63                          
2011-11-18  17.86                          
2011-11-21  17.01                          
2011-11-22  15.92                          
2011-11-23  15.56                          
2011-11-24  15.56                          
2011-11-25  15.36                          
2011-11-28  15.18                          
2011-11-29  15.84                          
2011-11-30  NaN                            ,             (1.0, 175, -9.4016837593189102)
2011-11-17  22.63                          
2011-11-18  22.03                          
2011-11-21  21.36                          
2011-11-22  19.93                          
2011-11-23  19.77                          
2011-11-24  19.77                          
2011-11-25  19.68                          
2011-11-28  19.16                          
2011-11-29  19.56                          
2011-11-30  NaN                            ,             (1.1, 100, -20.255968672741457)
2011-11-17  12.03                          
2011-11-18  10.95                          
2011-11-21  10.03                          
2011-11-22  9.003                          
2011-11-23  8.221                          
2011-11-24  8.221                          
2011-11-25  7.903                          
2011-11-28  7.709                          
2011-11-29  6.444                          
2011-11-30  NaN                            ,             (1.1, 125, -18.178187305758119)
2011-11-17  14.64                          
2011-11-18  13.76                          
2011-11-21  12.89                          
2011-11-22  11.85                          
2011-11-23  11.34                          
2011-11-24  11.34                          
2011-11-25  11.16                          
2011-11-28  11.06                          
2011-11-29  10.14                          
2011-11-30  NaN                            ,             (1.1, 150, -14.486791104380069)
2011-11-17  26.25                          
2011-11-18  25.57                          
2011-11-21  24.76                          
2011-11-22  23.74                          
2011-11-23  23.48                          
2011-11-24  23.48                          
2011-11-25  23.43                          
2011-11-28  23.38                          
2011-11-29  22.93                          
2011-11-30  NaN                            ,             (1.1, 175, -12.118290962161304)
2011-11-17  24.66                          
2011-11-18  24.21                          
2011-11-21  23.57                          
2011-11-22  22.14                          
2011-11-23  22.06                          
2011-11-24  22.06                          
2011-11-25  22.11                          
2011-11-28  21.64                          
2011-11-29  21.24                          
2011-11-30  NaN                            ] 

我的最终目标是得到一个pandas数据框,里面有一个索引(所有收益的索引都是一样的),列标题是(ENTRYMULT, PXITR1PERIOD, SHARPE),下面是对应的收益。我接下来会对所有收益序列进行成对相关性计算。

1 个回答

4

我觉得你只需要做的是:

data = DataFrame(dict(test1))

这样会得到一个数据框(DataFrame),它的列会是像(1.1, 175, -12.118290962161304)这样的元素。

在即将发布的pandas 0.6.1版本中,你还可以这样做:

data = DataFrame.from_items(test1)

撰写回答