【发布时间】:2018-09-17 18:47:06
【问题描述】:
目标 - 我总共有 50 条记录,需要找出工资 = 48,000 的 6 名球员的所有可能组合。
如果我只使用大约 20 条记录,下面的代码将起作用,但在尝试将其应用于所有 50 条记录时,我一直遇到内存错误。我正在寻找一种方法来优化我的代码,要么只接受 50k 以下的组合,而不会像我一样循环。
示例数据(目前共有 50 条记录)-
ID Salary
0 11282489 11000
1 11282517 10800
2 11282479 10700
3 11282521 10200
4 11282483 10100
5 11282481 10000
当前代码 -
comb = combinations(data['ID'], 6)
comb_list = list(comb)
df_list = []
for i in comb_list:
i = list(i)
if data.loc[data['ID'].isin(i)]['Salary'].sum() <= 50000 and data.loc[data['ID'].isin(i)]['Salary'].sum() >= 48000:
df_list.append(data.loc[data['ID'].isin(i)])
counter +=1
“comb_list”目前以大约 1500 万个组合结束,这是主要问题。有没有比我现在做的更好的方法来应用薪水过滤器?
谢谢!
【问题讨论】:
-
能否先按薪资范围过滤,然后在过滤结果上调用
combinations? -
工资总额是 6 条记录组合的总和,所以我认为没有办法真正过滤得到。
-
我的错误。我应该更仔细地阅读!
-
我敢打赌,有一种聪明的方法可以做到这一点,首先按薪水对 ID 进行排序,然后忽略不必要的组合。但这是一个很酷的问题。
标签: python pandas combinations combinatorics