Приведенный ниже код занимает 2 секунды до sh. Код выглядит чистым, но очень неэффективным.
Я пытаюсь предварительно сгенерировать способы, которыми вы можете создать, в общей сложности max_units
с шагом 2
Я бы тогда отфильтруйте созданную таблицу так, чтобы secondary_categories
соответствовали определенным критериям:
- 'A' составляет> 10% от общего количества, а 'B' <= 50% от общего количества. </li>
Видите ли вы лучший способ получить комбинации с шагом 2, которые удовлетворяют критериям, подобным приведенным выше?
import itertools
import pandas as pd
primary_types= ['I','II']
secondary_categories= ['A','B']
unitcategories= len(primary_types)*len(secondary_categories) #up to 8
min_units= 108; max_units= 110 #between 20 and 400
max_of_one_type= max_units
args =[[i for i in range(2,max_of_one_type, 2)] for x in range(unitcategories)]
lista= list(itertools.product(*args))
filt= [True if max_units>=l>=min_units else False for l in list(map(sum, lista))]
lista= list(itertools.compress(lista, filt))
df=pd.DataFrame(lista, columns= pd.MultiIndex.from_product([primary_types, secondary_categories], names=['', '']))
df['Total']=df.sum(axis=1)
df
Расширение следующего приводит к значительному увеличению времени или нехватке памяти: .
Спасибо