2012-07-11 197 views
2

给定一个包含多列(可能的回归因子)的DataFrame,如何生成所有可能的列组合以测试它们到不同的回归中?我试图从所有可能的回归因素组合中选择最佳的回归模型。DataFrame列的所有可能组合 - pandas/python

例如,我有这样的DataFrame

  A B 
1/1/2011 1 4 
1/2/2011 2 5 
1/3/2011 3 6 

,我想生成以下的:

  A B 
1/1/2011 1 4 
1/2/2011 2 5 
1/3/2011 3 6 

      A 
1/1/2011 1 
1/2/2011 2 
1/3/2011 3 

      B 
1/1/2011 4 
1/2/2011 5 
1/3/2011 6 

回答

3

尝试使用itertools生成列名的幂:

In [23]: import itertools as iter 

In [24]: def pset(lst): 
    ....:  comb = (iter.combinations(lst, l) for l in range(len(lst) + 1)) 
    ....:  return list(iter.chain.from_iterable(comb)) 
    ....: 


In [25]: pset(lst) 
Out[25]: 
[(), 
('A',), 
('B',), 
('C',), 
('D',), 
('A', 'B'), 
('A', 'C'), 
('A', 'D'), 
('B', 'C'), 
('B', 'D'), 
('C', 'D'), 
('A', 'B', 'C'), 
('A', 'B', 'D'), 
('A', 'C', 'D'), 
('B', 'C', 'D'), 
('A', 'B', 'C', 'D')] 
+0

完美,非常感谢你! – gustavopr 2012-07-11 17:06:41

7

如果您正在寻找colum ns相互抵消

df = DataFrame(numpy.random.randn(3,6), columns=['a','b','c','d','e','g']) 
df2 =[df[list(pair)] for pair in list(iter.combinations(df.columns, 2))]