如何基于原始值生成符合数值范围的DataFrame全组合多行数据
生成满足条件的多变量组合DataFrame代码实现
需求说明
给定初始变量:a=3、b=10、c=1,需创建包含a、b、c三列的DataFrame,要求:
- 每列取值为原始值加减指定常数(示例中常数为1)
- 取值需满足
0 < 值 ≤ 10 - DataFrame包含所有符合条件的
a、b、c取值组合
实现代码
import pandas as pd from itertools import product # 初始值与指定常数 initial_vals = {'a': 3, 'b': 10, 'c': 1} constant = 1 # 生成每个变量的候选值列表 candidates = {} for col, val in initial_vals.items(): # 生成加减常数后的所有可能值,再筛选符合0 < x ≤10的 possible = [val - constant, val, val + constant] candidates[col] = [x for x in possible if 0 < x <= 10] # 生成所有候选值的笛卡尔积组合,转为DataFrame all_combinations = list(product(candidates['a'], candidates['b'], candidates['c'])) df_result = pd.DataFrame(all_combinations, columns=['a', 'b', 'c']) print(df_result)
代码说明
- 候选值生成:遍历每个初始变量,生成
原始值-常数、原始值、原始值+常数三个可能值,再通过列表推导式筛选出满足0 < x ≤10的有效取值。 - 组合生成:使用
itertools.product计算所有变量候选值的笛卡尔积,得到所有合法的组合。 - DataFrame转换:将组合列表转为指定列名的DataFrame,完成需求。
输出结果
运行代码后会输出包含所有合法组合的DataFrame:
a b c 0 2 9 1 1 2 9 2 2 2 10 1 3 2 10 2 4 3 9 1 5 3 9 2 6 3 10 1 7 3 10 2 8 4 9 1 9 4 9 2 10 4 10 1 11 4 10 2
内容的提问来源于stack exchange,提问作者Ketty
相关产品推荐
相关产品推荐

