我正在尝试创建所有可能的球员配对组合,以根据障碍类型 A、B、C 或 D 分配到 4 人高尔夫球队。
我尝试了各种 itertools 方法,例如组合和排列,但无法找出正确的方法。
from itertools import combinations, product, permutations
g = player_df.groupby(by = 'hcp_ABCD')
teams_listoflists = [group[1].index for group in g]
teams_combo_ndx = [player for player in permutations(teams_listoflists, 4)]
这是我的熊猫表:
handicap name hcp_ABCD
0 24 Player1 D
1 21 Player2 D
2 8 Player3 B
3 14 Player4 C
4 20 Player5 D
5 13 Player6 C
6 -1 Player7 A
7 5 Player8 A
8 8 Player9 B
9 6 Player10 B
10 20 Player11 D
11 15 Player12 C
12 0 Player13 A
13 12 Player14 C
14 0 Player15 A
15 10 Player16 B
我希望输出是玩家组合(团队)的所有组合(不重复),这样每个团队都有一个类型 A、B、C 和 D。该输出可以是与上面按“选项”分组的类似表格。
编辑:为了清楚起见,我添加了这个输出示例。
A Player B Player C Player D Player
option 1 team1 Player7 Player3 Player4 Player1
team2 Player8 Player9 Player6 Player2
team3 Player13 Player10 Player12 Player5
team4 Player15 Player16 Player14 Player11
上面的重点是,我正在尝试找到一个生成器,该生成器循环遍历每个障碍组中的所有球员组合,以便团队选项的组合清晰。
编辑#2 我已经确定此代码产生了所有潜在团队组合的组合:
g = df.groupby(by = 'hcp_ABCD')
combinations = [list(group[1].index) for group in g]
这将创建一个列表列表,其中包含列表 [0] 中的 A 玩家、列表 [1] 中的 B 玩家等。
这为所有可能的团队组合提供了一个索引器:
from itertools import product
options = [option for option in product(*combinations)]
但是,如何将这些分配到“选项”中(见上面的例子)并确保没有重复是我坚持的。
编辑#3 一个更简单的版本(考虑这个问题的方法)是使用以下集合:
A = ['A1', 'A2', 'A3', 'A4']
B = ['B1', 'B2', 'B3', 'B4']
C = ['C1', 'C2', 'C3', 'C4']
D= ['D1', 'D2', 'D3', 'D4']
这基本上完成了上面 groupby 所做的事情(按 hcp_ABCD 分组),但命名每个“A Player”、“B Player”等。
可能的团队组合:
team_combinations = [team for team in product(A, B, C, D)]
然后下一个技巧是将这些分配到 4 支球队的组合中,并且没有重复的球员。
MMMHUHU
眼眸繁星
GCT1015
相关分类