Python:将描述与itertools.product的每个组合相关联

时间:2015-07-11 13:39:03

标签: python itertools cartesian-product

我有一个运行数值模拟的函数。我想为每个参数定义一些可能的输入,并在所有可能的组合上运行该函数。我现在的方式是使用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,我可以根据其他方法考虑替代方案。

1 个答案:

答案 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制作的不同笛卡尔产品。您也可以使用字典来实现此目的,当您拥有描述数据帧的元数据时,这实际上是一个不错的选择。