While循环,用于迭代两个值之间的所有组合

时间:2019-06-01 20:27:04

标签: python while-loop

我想创建一个循环,将两个变量的所有迭代加载到单独列中的数据框中。我希望变量“ a”以0.1的增量保持0到1之间的值,而变量“ b”也是如此。换句话说,完成后应该有100次迭代,从0&0开始,以1&1结尾。

我尝试了以下代码

data = [['Decile 1', 10], ['Decile_2', 15], ['Decile_3', 14]]
staging_table = pd.DataFrame(data, columns = ['Decile', 'Volume'])
profile_table = pd.DataFrame(columns = ['Decile', 'Volume'])

a = 0
b = 0

finished = False

while not finished:
    if b != 1:
        if a != 1:
            a = a + 0.1
            staging_table['CAM1_Modifier'] = a
            staging_table['CAM2_Modifier'] = b
            profile_table = profile_table.append(staging_table)
        else:
            b = b + 0.1
    else:
        finished = True  

profile_table

2 个答案:

答案 0 :(得分:1)

您可以使用itertools.product获取所有组合:

import itertools
import pandas as pd

x = [i / 10 for i in range(11)]
df = pd.DataFrame(
    list(itertools.product(x, x)),
    columns=["a", "b"]
)

#        a    b
# 0    0.0  0.0
# 1    0.0  0.1
# 2    0.0  0.2
# ...  ...  ...
# 118  1.0  0.8
# 119  1.0  0.9
# 120  1.0  1.0
# 
# [121 rows x 2 columns]

答案 1 :(得分:1)

itertools是你的朋友。

from itertools import product

for a, b in product(map(lambda x: x / 10, range(10)),
                    map(lambda x: x / 10, range(10))):
  ...

range(10)为我们提供了从010的整数(遗憾的是,range在浮点数上失败)。然后,我们将这些值除以10,以获得从01的范围。然后,我们以该可迭代的笛卡尔乘积本身来获得每种组合。