我有一个熊猫数据框架,看起来像这样:
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]
或者像这样的东西。任何帮助或提示都将不胜感激。
发布于 2019-05-30 08:11:44
既然你提到了“所有组合”,我认为你看到的不是一个最优的解决方案。唯一的可能性是使用暴力并生成所有政党组合,并选择总和大于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
https://stackoverflow.com/questions/56369760
复制相似问题