如何生成多变量不同取值组合的所有可能和及对应方案的DataFrame
生成多变量取值组合的所有可能和并存储到DataFrame
问题描述
现有多个变量的取值集合:
A = [0.9, 0.7, 1, 0.5] B = [0, 1] C = [0.3, 0.6, 0.9] D = [-1.8, 0]
需要生成所有变量取值组合的求和结果,同时为每个组合生成对应的方案标识,最终将数据存入Pandas DataFrame,格式如下:
| 方案 | 求和结果 |
|---|---|
| A0.9_B0_C0.3_D-1.8 | -0.6 |
| A0.9_B1_C0.3_D-1.8 | 0.4 |
解决方法
可以通过itertools.product生成所有变量的笛卡尔积组合,再遍历计算求和结果并生成方案标识,最后存入DataFrame,步骤如下:
- 生成全组合:用
itertools.product快速生成所有变量取值的笛卡尔积,覆盖所有可能的组合。 - 计算与标识:对每个组合,计算求和结果,同时拼接变量名与对应值生成方案字符串。
- 存入DataFrame:将方案和结果整理成结构化数据,转换为DataFrame。
完整代码示例
import itertools import pandas as pd # 定义变量及其取值集合 variables = { 'A': [0.9, 0.7, 1, 0.5], 'B': [0, 1], 'C': [0.3, 0.6, 0.9], 'D': [-1.8, 0] } # 生成所有可能的取值组合 all_combinations = itertools.product(*variables.values()) # 收集方案和对应的求和结果 result_data = [] for combo in all_combinations: # 拼接方案字符串(变量名+取值,下划线分隔) plan = '_'.join(f"{key}{val}" for key, val in zip(variables.keys(), combo)) # 计算当前组合的和 sum_result = sum(combo) result_data.append({"方案": plan, "求和结果": sum_result}) # 转换为DataFrame df = pd.DataFrame(result_data) # 查看前几行示例 print(df.head())
示例输出
运行代码后,DataFrame的前5行结果如下:
| 方案 | 求和结果 |
|---|---|
| A0.9_B0_C0.3_D-1.8 | -0.6 |
| A0.9_B0_C0.3_D0 | 1.2 |
| A0.9_B0_C0.6_D-1.8 | -0.3 |
| A0.9_B0_C0.6_D0 | 1.5 |
| A0.9_B0_C0.9_D-1.8 | 0.0 |
内容的提问来源于stack exchange,提问作者Raganosis
相关产品推荐
相关产品推荐

