Цикл while для перебора всех комбинаций между двумя значениями - PullRequest
0 голосов
/ 01 июня 2019

Я хочу создать цикл, который загружает все итерации двух переменных в фрейм данных в отдельных столбцах. Я хочу, чтобы переменная "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 ]

1 голос
/ 01 июня 2019

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) дает нам целые числа от 0 до 10 (к сожалению, range терпит неудачу в числах с плавающей запятой). Затем мы делим эти значения на 10, чтобы получить ваш диапазон от 0 до 1. Затем мы берем декартово произведение того итерируемого с собой, чтобы получить каждую комбинацию.

1 голос
/ 01 июня 2019

Вы можете использовать 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...