如何在熊猫中创建一个阶乘数据框?

时间:2013-09-10 17:58:51

标签: python pandas dataframe factors

如何使用所有可能的因子组合创建pandas数据框?

factor1 = ['a','b']
factor2 = ['x','y,'z']
factor3 = [1, 2]
val = 0

这就是我的目标:

   factor1 factor2  factor3  val
      a       x        1      0
      a       y        1      0
      a       z        1      0
      a       x        2      0
      a       y        2      0
      a       z        2      0   
      b       x        1      0
      b       y        1      0
      b       z        1      0
      b       x        2      0
      b       y        2      0
      b       z        2      0

由于这么少的因素,这可以手动完成,但随着数量的增加,使用一种更加自动化的方式构建它将是切实可行的。

2 个答案:

答案 0 :(得分:1)

这是list comprehensions的用途。

factor1 = ['a','b']
factor2 = ['x','y,'z']
factor3 = [1, 2]
val = 0

combs = [ (f1, f2, f3, val)
    for f1 in factor2
    for f2 in factor2
    for f3 in factor3 ]
# [ ('a', 'x', 1, 0),
#   ('a', 'x', 2, 0),
#   ('a', 'y', 1, 0),
#   ('a', 'y', 2, 0),
#   ... etc

(f1, f2, f3, val)替换为您要用于打印表格的任何内容。或者您可以从元组列表中打印出来。

在数学上,这被称为Cartesian Product

答案 1 :(得分:0)

由于我想要一个pandas数据框,我实际创建了一个字典列表(为了有列名):

import pandas as pd

combs = [ {'factor1':f1, 'factor2':f2, 'factor3':f3, 'val':val} for f1 in factor1 for f2 in factor2 for f3 in factor3 ]
df = pd.DataFrame(combs)