【问题标题】:Python: associating a description to each combination of itertools.productPython:将描述与 itertools.product 的每个组合相关联
【发布时间】:2015-09-30 04:55:58
【问题描述】:

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

【问题讨论】:

  • 你不能把param2_description变成字典{dataframe1: 'optimistic assumptions', ...}然后简单地传递param2_description[i[0]]吗?
  • 字典的键不是必须是字符串吗?我会使用数据框对象作为字典的键吗?
  • 你真正想要的输出是什么?
  • @freakish 我可以让 itertools 遍历字典的键。这将允许我检索值和描述。谢谢!我早该想到的……
  • @Pythonistaan​​onymous 字典键不必是字符串。它们可以是任何不可变的对象。但是,如果您找到了不同的解决方案,那就太好了。

标签: python itertools cartesian-product


【解决方案1】:

为什么不简单地将描述与相关数据框一起作为元组(或字典或任何其他适合您目的的数据类型)传递给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] 中获得该数据框的描述,并且您将拥有它用于制作的不同笛卡尔产品通过迭代工具。您也可以为此目的使用字典,当您拥有描述数据帧的元数据时,这实际上是一个不错的选择。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多