查找数据帧列中的所有值组合,并根据不同列中的值进行优化



我有一个具有以下结构的数据帧:

|code|score|slots|
|a   |50   |0.25 |
|b   |66   |0.33 |
|c   |20   |0.20 |
|d   |28   |0.20 |
|e   |23   |0.33 |

我需要做的是找到所有"槽"的组合,这些组合加起来不超过一个给定的值,比如1.0,然后选择相关组合"分数"最高的组合,最后输出与最佳组合对应的"代码"。多亏了这个答案,我能够完成第一部分,但与原始数据帧的关联丢失了,我不知道如何从"分数"one_answers"代码"列中检索相关信息:

import itertools
comb = [seq for i in range(len(df['slots']), 0, -1) for seq in itertools.combinations(df['slots'], i)
if sum(seq) <= 1]

我正在考虑使用字典,但我的数据帧将包含相同的键。如何获得与所选组合相对应的键和值的列表?

我已经通过首先生成"代码"的唯一组合部分解决了这个问题:

data = [['a', 50, 0.25], ['b', 66, 0.33], ['c', 20, 0.2], ['d', 28, 0.2], ['e', 23, 0.33]]
df = pd.DataFrame(data, columns=['code', 'points', 'slots'])
combinations = [seq for i in range(len(df['code']), 0, -1)
for seq in itertools.combinations(df['code'], i)]
dfComb = pd.DataFrame(columns=['combination', 'slots', 'points'])
for combination in combinations:
dfA = df[df['code'].isin(combination)]
dfB = pd.DataFrame({'combination': [combination],
'slots': sum(dfA['slots']),
'points': sum(dfA['points'])})
dfComb = dfComb.append(dfB, ignore_index=True)
dfTrim = dfComb[dfComb['slots'] < 1.0]

然而,由于这个问题的复杂性随着数据帧的大小呈指数级增长,我可能会尝试使用numpy而不是panda,看看这是否会加快速度。

最新更新