首页 > 解决方案 > 如何使用python找到所有可能的团队组合

问题描述

这是数据集的屏幕截图。使用这个数据集,我需要找到得分低于 100 的 8 名球员的所有可能组合。这个数据集中包含 2 个球队球员。因此,新球队应该包含 3:4 或 4:4 比例的老球队球员。每个位置必须至少有一名球员

数据集

下面是我尝试过的代码。

import pandas as pd
import numpy as np
import sklearn 
from sklearn.preprocessing import LabelEncoder
import random
import itertools
from itertools import product

"""Importing dataset"""

dataset = pd.read_excel("NBA_0.xlsx")
print (dataset)
df = pd.DataFrame(dataset) 
df[['Player', 'Postion']]

"""Label Encoding"""

label_encoder = LabelEncoder()
df['Postion'] = label_encoder.fit_transform(dataset['Postion'])
df['Team'] = label_encoder.fit_transform(dataset['Team'])
df[['Player', 'Postion', 'Team']]

"""Select one player from each position"""

df_PG_0 = df[(df['Postion'] == 0) & (df['Team'] == 0)]
df_PG_0.sample()

df_PG_1 = df[(df['Postion'] == 0) & (df['Team'] == 1)]
df_PG_1.sample()

df_SG_0 = df[(df['Postion'] == 1) & (df['Team'] == 0)]
df_SG_0.sample()

df_SG_1 = df[(df['Postion'] == 1) & (df['Team'] == 1)]
df_SG_1.sample()

df_PF_0 = df[(df['Postion'] == 2) & (df['Team'] == 0)]
df_PF_0.sample(2)

df_PF_1 = df[(df['Postion'] == 2) & (df['Team'] == 1)]
df_PF_1.sample()

df_C_0 = df[(df['Postion'] == 3) & (df['Team'] == 0)]
df_C_0.sample()

df_C_1 = df[(df['Postion'] == 3) & (df['Team'] == 1)]
df_C_1.sample()

df_SF_0 = df[(df['Postion'] == 4) & (df['Team'] == 0)]
df_SF_0.sample()

df_SF_1 = df[(df['Postion'] == 4) & (df['Team'] == 1)]
df_SF_1.sample()

df_sample_H = pd.concat([df_PG_0, df_SG_0, df_SF_0, df_PF_0, df_C_0]).sample(3)
print(df_sample_H)

df_sample_L = pd.concat([df_PG_1, df_SG_1, df_SF_1, df_PF_1, df_C_1]).sample(5)
print(df_sample_L)

df_sample_team = pd.concat([df_sample_L, df_sample_H]).sample(8)
print(df_sample_team)

"""select 3:4 players from each team"""

df_sample = pd.concat([df_PG_0,df_PG_1, df_SG_0, df_SG_1, df_SF_0, df_SF_1, df_PF_0, df_PF_1, df_C_0, df_C_1]).sample(8)
print(df_sample)


"""Credit Score should be less than 100"""

df_value = df_sample_team.Credits.cumsum() 
print(df_value)

使用上面的代码,我一次只能得到一个团队。如何修改我的代码,以便获得所有可能得分低于 100 的球队。此数据集中包含 2 个球队球员。因此,新球队应该包含 3:4 或 4:4 比例的老球队球员。每个位置必须至少有一名球员

标签: pythonpandasdataframenumpycombinatorics

解决方案


要获得所有得分低于 100 分的球队的 df,让我们为其命名dfteams

dfteams = df.loc[df['Points'] < 100, 'Team']

还可以根据条件创建一个新列,如果满足或不满足条件,则分配一个值 1/0

cond = (df['Points']<100)
df['New'] = np.where(cond, 1, 0)

推荐阅读