如何让itertools.combinations生成的DataFrame列组合必含const列?
解决强制包含const列的最优子集回归组合生成问题
核心思路
- 将
const列与其他自变量列分离,单独固定在每个组合中 - 仅用
itertools.combinations遍历非const的自变量列的组合,组合长度为「目标总列数-1」 - 把每个生成的自变量组合与
('const',)拼接,确保所有结果都包含常数项
修改后的代码示例
import itertools import numpy as np import pandas as pd import statsmodels.api as sm cols = ['A', 'B', 'C', 'D', 'E', 'F'] const = [1]*12 # 简化常数列表的写法 ran = np.random.rand(12, 6) df = pd.DataFrame(data=ran, columns=cols) df['const'] = const results = [] # 设置每个组合的总列数(示例为3) target_total_cols = 3 # 遍历非const列的组合,长度为总列数减1(即选2个自变量) for var_combo in itertools.combinations(cols, target_total_cols - 1): # 拼接const与自变量组合 full_combo = ('const',) + var_combo results.append(full_combo) print(results)
关键说明
- 直接使用原始自变量列表
cols(不含const)遍历,避免无效的全列组合 - 若需要生成不同长度的组合(比如2列、4列),只需调整
target_total_cols的值,同时对应修改itertools.combinations的第二个参数 - 生成的结果完全符合你期望的格式,每个组合都强制包含
const列
内容的提问来源于stack exchange,提问作者Zachary Leonard
相关产品推荐
相关产品推荐

