我有一个运行数值模拟的函数。我想为每个参数定义一些可能的输入,并在所有可能的组合上运行该函数。我现在的方式是使用itertools:
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])
我的问题是:如何将描述与参数的每个可能值相关联,并将其传递给函数?换句话说,当i [0] = dataframe1时,我如何将'乐观假设'传递给我的函数?
我考虑过在列表中查找项目的函数,但我不确定它们是否适用于所有对象,例如pandas数据帧。
谢谢! PS我不必不惜一切代价使用itertools,我可以根据其他方法考虑替代方案。
答案 0 :(得分:2)
为什么不简单地将描述与相关数据框一起作为元组(或dict或任何其他适合您目的的数据类型)传递给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制作的不同笛卡尔产品。您也可以使用字典来实现此目的,当您拥有描述数据帧的元数据时,这实际上是一个不错的选择。