Перечислите все возможные комбинации значений фрейма данных pandas для достижения определенной суммы

У меня есть фрейм данных pandas, который выглядит так:

party seats
A      34
B      26
C      19
D      12
E      10

Всего всегда 101 место. Мне нужно получить список всех возможных комбинаций партий, имеющих вместе 51 и более мест.

Например,

[A, B]
[A, C]
[A, B, C]
[A, B, D]
...
[A, B, C, D, E]

или что-то в этом роде. Любая помощь или советы будут высоко оценены.

Изучите «задачу о рюкзаке».

Draconis 30.05.2019 01:28

Если количество строк не слишком велико, вы можете перебрать его. Для n строк есть 2^n подмножества, которые вам нужны для вычисления суммы.

LoMaPh 30.05.2019 01:53

Ознакомьтесь с рецептом мощность в документации itertools. Он использует цепь и комбинации.

seanswe 30.05.2019 02:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
1 462
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы упомянули «все комбинации», я думаю, вы не ищете одно оптимальное решение. Единственной возможностью было бы перебором и генерированием всех комбинаций сторон и выбором тех, у которых сумма больше 51.

Вот один из способов сделать это.

import pandas as pd
import numpy as np
import itertools

# Data Generation
alphabets = [chr(i) for i in range(ord('a'),ord('z')+1)]
party_size = 6
seats = 51
df = pd.DataFrame(np.random.randint(20,100,party_size), index=alphabets[:party_size])

#Algo
parties = df.index
a = []
for r in range(parties.shape[0]): # Generate combinations
    ls = list(itertools.combinations(parties, r))
    ls1 = [inx for inx in ls if df.loc[inx,:].sum()[0] > seats] # Choose only what qualifies
    a.extend(ls1) # Generate master list

Другие вопросы по теме

Похожие вопросы