2015-07-11 19 views
0

我有一個運行數值模擬的功能。我想爲每個參數定義一些可能的輸入,並在所有可能的組合上運行該功能。現在我做的方法是使用itertools:Python:將描述關聯到itertools.product的每個組合

param1=['London','New York','Paris'] 
param2=[dataframe1,dataframe2] 
param2_description =['optimistic assumptions','conservative assumptions' ] 


myprod = itertools.product(param1, param2) 
for i in myprod: 
    myresult = myfunction(i[0],i[1]) 

我的問題是:我怎麼能說明該參數的每個可能值相關聯,並把它傳遞給函數?換句話說,當我[0] = dataframe1,我怎麼能通過'樂觀假設'我的功能?

我想到了在列表中查找項目的函數,但我不確定它們是否可以處理所有對象,如熊貓數據框。

謝謝! PS我不必不惜一切代價使用itertools,我可以考慮基於其他方法的替代方案。

+1

難道你不能把'param2_description'變成一個字典{dataframe1:'optimistic assumptions',...}',然後簡單地傳遞'param2_description [i [0]]'? – freakish

+0

字典的密鑰不需要是字符串嗎?我會使用數據框對象作爲字典的關鍵嗎? –

+0

你真的想要輸出什麼? –

回答

2

爲什麼不簡單地將描述與相關數據框一起作爲元組(或字典或任何其他適合您的目的的數據類型)傳遞給itertools.product

例子:

In [14]: myprod1 = itertools.product(param1, zip(param2, param2_description)) # remark: replaced the dataframes simply by letters 

In [15]: list(myprod1) 
Out[15]: 
[('London', ('a', 'optimistic assumptions')), 
('London', ('b', 'conservative assumptions')), 
('New York', ('a', 'optimistic assumptions')), 
('New York', ('b', 'conservative assumptions')), 
('Paris', ('a', 'optimistic assumptions')), 
('Paris', ('b', 'conservative assumptions'))] 

對於myprod1每個項目就可以運行在數據幀(item[1][0])模擬當您在item[1][1]可用的數據框的描述),你就會有它的itertools製作的不同笛卡爾產品。你也可以爲此使用字典,當你有元數據描述你的數據框時,這實際上是一個不錯的選擇。