Multichem's picture
Create app.py
6da5de4
raw
history blame
127 kB
import pulp
import numpy as np
import pandas as pd
import random
import sys
import openpyxl
import re
import time
import streamlit as st
import matplotlib
from matplotlib.colors import LinearSegmentedColormap
from st_aggrid import GridOptionsBuilder, AgGrid, GridUpdateMode, DataReturnMode
st.set_page_config(layout="wide")
tab1, tab2 = st.tabs(["Projections", "Optimizer"])
Player_data_URL = 'https://sheetdb.io/api/v1/yzxwxt7njic9z?sheet=Ceiling_Tables'
Projection_URL = 'https://sheetdb.io/api/v1/5e6ksfq0q1ghr?sheet=DK_Build_Up'
Optimizer_URL = 'https://sheetdb.io/api/v1/yzxwxt7njic9z?sheet=DK_NBA_Master'
CSV_URL = 'https://sheetdb.io/api/v1/5e6ksfq0q1ghr?sheet=DK_CSV'
@st.cache
def convert_df_to_csv(df):
# IMPORTANT: Cache the conversion to prevent computation on every rerun
return df.to_csv().encode('utf-8')
@st.experimental_memo
def grab_csv_data(URL):
draftkings_data = pd.read_json(URL)
draftkings_data.rename(columns={"Name": "Player"}, inplace = True)
return draftkings_data
def grab_projection_data(URL):
projection_data = pd.read_json(Projection_URL)
wrongNames = ["Bruce Brown Jr.",
"TJ McConnell",
"Frank Mason",
"Troy Brown",
"Damian Lee",
"Sviatoslav Mykhailiuk",
"CJ Miles",
"Brian Bowen",
"Jacob Evans",
"Wes Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"TJ Warren",
"T. J. Leaf",
"Maurice Harkless",
"George Niang",
"Jarrell Brantley",
"Maximilian Kleber",
"Harry Giles III",
"D.J. Wilson",
"Alen Smailagic",
"Willy Hernangomez",
"P.J. Washington",
"Robert Williams III",
"R.J. Barrett",
"Jaren Jackson",
"Glenn Robinson",
"Wendell Carter",
"O.G. Anunoby",
"PJ Tucker",
"Michael Porter",
"Lonnie Walker",
"Derrick Jones",
"Kelly Oubre",
"Brad Wanamaker",
"Timothe Luwawu-Cabarrot",
"Otto Porter",
"Mohamed Bamba",
"Juancho Hernangómez",
"Danuel House",
"Kevin Knox",
"Gary Trent",
"Kezie Okpala",
"DeAndre Bembry",
"Shaquille Harrison",
"Vernon Carey",
"RJ Hampton",
"Marvin Bagley",
"Kira Lewis",
"Larry Nance",
"Tim Hardaway",
"Dennis Smith",
"Kevin Porter",
"C.J. McCollum",
"JJ Redick",
"James Ennis",
"Marcus Morris",
"Kevin Porter",
"Kenyon Martin",
"Gary Payton",
"David Duke",
"Brandon Boston",
"Herb Jones",
"Duane Washington",
"Derrick Walton Jr.",
"Cameron Thomas",
"Nicolas Claxton",
"Jabari Smith II",
'Jabari Smith',
"Alperen Şengün",
"Kristaps Porziņģis",
"Juancho Hernangómez",
"Nikola Jović",
"A.J. Green",
'Nikola Jokić',
'Jusuf Nurkić',
'Jonas Valančiūnas',
'Dennis Schröder',
'Bogdan Bogdanović',
'Kenyon Martin Jr.',
'Trey Murphy',
'Vlatko Čančar',
'MarJon Beauchamp',
'Goran Dragić'
]
correctNames = [
"Bruce Brown",
"T.J. McConnell",
"Frank Mason III",
"Troy Brown Jr.",
"Damion Lee",
"Svi Mykhailiuk",
"C.J. Miles",
"Brian Bowen II",
"Jacob Evans III",
"Wesley Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"T.J. Warren",
"TJ Leaf",
"Moe Harkless",
"Georges Niang",
"Jarrell Brantley",
"Maxi Kleber",
"Harry Giles",
"D. J. Wilson",
"Alen Smailagic",
"Guillermo Hernangomez",
"PJ Washington",
"Robert Williams",
"RJ Barrett",
"Jaren Jackson Jr.",
"Glenn Robinson III",
"Wendell Carter Jr.",
"OG Anunoby",
"P.J. Tucker",
"Michael Porter Jr.",
"Lonnie Walker IV",
"Derrick Jones Jr.",
"Kelly Oubre Jr.",
"Bradley Wanamaker",
"Timothe Luwawu",
"Otto Porter Jr.",
"Mo Bamba",
"Juan Hernangomez",
"Danuel House Jr.",
"Kevin Knox II",
"Gary Trent Jr.",
"KZ Okpala",
"DeAndre' Bembry",
"Shaq Harrison",
"Vernon Carey Jr.",
"R.J. Hampton",
"Marvin Bagley III",
"Kira Lewis Jr.",
"Larry Nance Jr.",
"Tim Hardaway Jr.",
"Dennis Smith Jr.",
"Kevin Porter Jr.",
"CJ McCollum",
"J.J. Redick",
"James Ennis III",
"Marcus Morris Sr.",
"Kevin Porter Jr",
"KJ Martin",
"Gary Payton II",
"David Duke Jr.",
"Brandon Boston Jr.",
"Herbert Jones",
"Duane Washington Jr.",
"Derrick Walton",
"Cam Thomas",
"Nic Claxton",
"Jabari Smith Jr.",
"Jabari Smith Jr.",
"Alperen Sengun",
"Kristaps Porzingis",
"Juancho Hernangomez",
"Nikola Jovic",
"AJ Green",
'Nikola Jokic',
'Jusuf Nurkic',
'Jonas Valanciunas',
'Dennis Schroder',
'Bogdan Bogdanovic',
'KJ Martin',
'Trey Murphy III',
'Vlatko Cancar',
'MarJon Beauchamp',
'Goran Dragic'
]
try:
for checkVar in range(len(wrongNames)):
projection_data['Player'] = projection_data['Player'].replace(wrongNames, correctNames)
except:
for checkVar in range(len(wrongNames)):
projection_data['Name'] = projection_data['Name'].replace(wrongNames, correctNames)
return projection_data
def grab_optimizer_data(URL):
optimizer_data = pd.read_json(Optimizer_URL)
wrongNames = ["Bruce Brown Jr.",
"TJ McConnell",
"Frank Mason",
"Troy Brown",
"Damian Lee",
"Sviatoslav Mykhailiuk",
"CJ Miles",
"Brian Bowen",
"Jacob Evans",
"Wes Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"TJ Warren",
"T. J. Leaf",
"Maurice Harkless",
"George Niang",
"Jarrell Brantley",
"Maximilian Kleber",
"Harry Giles III",
"D.J. Wilson",
"Alen Smailagic",
"Willy Hernangomez",
"P.J. Washington",
"Robert Williams III",
"R.J. Barrett",
"Jaren Jackson",
"Glenn Robinson",
"Wendell Carter",
"O.G. Anunoby",
"PJ Tucker",
"Michael Porter",
"Lonnie Walker",
"Derrick Jones",
"Kelly Oubre",
"Brad Wanamaker",
"Timothe Luwawu-Cabarrot",
"Otto Porter",
"Mohamed Bamba",
"Juancho Hernangómez",
"Danuel House",
"Kevin Knox",
"Gary Trent",
"Kezie Okpala",
"DeAndre Bembry",
"Shaquille Harrison",
"Vernon Carey",
"RJ Hampton",
"Marvin Bagley",
"Kira Lewis",
"Larry Nance",
"Tim Hardaway",
"Dennis Smith",
"Kevin Porter",
"C.J. McCollum",
"JJ Redick",
"James Ennis",
"Marcus Morris",
"Kevin Porter",
"Kenyon Martin",
"Gary Payton",
"David Duke",
"Brandon Boston",
"Herb Jones",
"Duane Washington",
"Derrick Walton Jr.",
"Cameron Thomas",
"Nicolas Claxton",
"Jabari Smith II",
'Jabari Smith',
"Alperen Şengün",
"Kristaps Porziņģis",
"Juancho Hernangómez",
"Nikola Jović",
"A.J. Green",
'Nikola Jokić',
'Jusuf Nurkić',
'Jonas Valančiūnas',
'Dennis Schröder',
'Bogdan Bogdanović',
'Kenyon Martin Jr.',
'Trey Murphy',
'Vlatko Čančar',
'MarJon Beauchamp',
'Goran Dragić'
]
correctNames = [
"Bruce Brown",
"T.J. McConnell",
"Frank Mason III",
"Troy Brown Jr.",
"Damion Lee",
"Svi Mykhailiuk",
"C.J. Miles",
"Brian Bowen II",
"Jacob Evans III",
"Wesley Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"T.J. Warren",
"TJ Leaf",
"Moe Harkless",
"Georges Niang",
"Jarrell Brantley",
"Maxi Kleber",
"Harry Giles",
"D. J. Wilson",
"Alen Smailagic",
"Guillermo Hernangomez",
"PJ Washington",
"Robert Williams",
"RJ Barrett",
"Jaren Jackson Jr.",
"Glenn Robinson III",
"Wendell Carter Jr.",
"OG Anunoby",
"P.J. Tucker",
"Michael Porter Jr.",
"Lonnie Walker IV",
"Derrick Jones Jr.",
"Kelly Oubre Jr.",
"Bradley Wanamaker",
"Timothe Luwawu",
"Otto Porter Jr.",
"Mo Bamba",
"Juan Hernangomez",
"Danuel House Jr.",
"Kevin Knox II",
"Gary Trent Jr.",
"KZ Okpala",
"DeAndre' Bembry",
"Shaq Harrison",
"Vernon Carey Jr.",
"R.J. Hampton",
"Marvin Bagley III",
"Kira Lewis Jr.",
"Larry Nance Jr.",
"Tim Hardaway Jr.",
"Dennis Smith Jr.",
"Kevin Porter Jr.",
"CJ McCollum",
"J.J. Redick",
"James Ennis III",
"Marcus Morris Sr.",
"Kevin Porter Jr",
"KJ Martin",
"Gary Payton II",
"David Duke Jr.",
"Brandon Boston Jr.",
"Herbert Jones",
"Duane Washington Jr.",
"Derrick Walton",
"Cam Thomas",
"Nic Claxton",
"Jabari Smith Jr.",
"Jabari Smith Jr.",
"Alperen Sengun",
"Kristaps Porzingis",
"Juancho Hernangomez",
"Nikola Jovic",
"AJ Green",
'Nikola Jokic',
'Jusuf Nurkic',
'Jonas Valanciunas',
'Dennis Schroder',
'Bogdan Bogdanovic',
'KJ Martin',
'Trey Murphy III',
'Vlatko Cancar',
'MarJon Beauchamp',
'Goran Dragic'
]
try:
for checkVar in range(len(wrongNames)):
projection_data['Player'] = projection_data['Player'].replace(wrongNames, correctNames)
except:
for checkVar in range(len(wrongNames)):
projection_data['Name'] = projection_data['Name'].replace(wrongNames, correctNames)
return projection_data
def grab_player_data(URL):
player_data = pd.read_json(Player_data_URL)
wrongNames = ["Bruce Brown Jr.",
"TJ McConnell",
"Frank Mason",
"Troy Brown",
"Damian Lee",
"Sviatoslav Mykhailiuk",
"CJ Miles",
"Brian Bowen",
"Jacob Evans",
"Wes Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"TJ Warren",
"T. J. Leaf",
"Maurice Harkless",
"George Niang",
"Jarrell Brantley",
"Maximilian Kleber",
"Harry Giles III",
"D.J. Wilson",
"Alen Smailagic",
"Willy Hernangomez",
"P.J. Washington",
"Robert Williams III",
"R.J. Barrett",
"Jaren Jackson",
"Glenn Robinson",
"Wendell Carter",
"O.G. Anunoby",
"PJ Tucker",
"Michael Porter",
"Lonnie Walker",
"Derrick Jones",
"Kelly Oubre",
"Brad Wanamaker",
"Timothe Luwawu-Cabarrot",
"Otto Porter",
"Mohamed Bamba",
"Juancho Hernangómez",
"Danuel House",
"Kevin Knox",
"Gary Trent",
"Kezie Okpala",
"DeAndre Bembry",
"Shaquille Harrison",
"Vernon Carey",
"RJ Hampton",
"Marvin Bagley",
"Kira Lewis",
"Larry Nance",
"Tim Hardaway",
"Dennis Smith",
"Kevin Porter",
"C.J. McCollum",
"JJ Redick",
"James Ennis",
"Marcus Morris",
"Kevin Porter",
"Kenyon Martin",
"Gary Payton",
"David Duke",
"Brandon Boston",
"Herb Jones",
"Duane Washington",
"Derrick Walton Jr.",
"Cameron Thomas",
"Nicolas Claxton",
"Jabari Smith II",
'Jabari Smith',
"Alperen Şengün",
"Kristaps Porziņģis",
"Juancho Hernangómez",
"Nikola Jović",
"A.J. Green",
'Nikola Jokić',
'Jusuf Nurkić',
'Jonas Valančiūnas',
'Dennis Schröder',
'Bogdan Bogdanović',
'Kenyon Martin Jr.',
'Trey Murphy',
'Vlatko Čančar',
'MarJon Beauchamp',
'Goran Dragić'
]
correctNames = [
"Bruce Brown",
"T.J. McConnell",
"Frank Mason III",
"Troy Brown Jr.",
"Damion Lee",
"Svi Mykhailiuk",
"C.J. Miles",
"Brian Bowen II",
"Jacob Evans III",
"Wesley Iwundu",
"Melvin Frazier",
"Charlie Brown",
"Marko Guduric",
"T.J. Warren",
"TJ Leaf",
"Moe Harkless",
"Georges Niang",
"Jarrell Brantley",
"Maxi Kleber",
"Harry Giles",
"D. J. Wilson",
"Alen Smailagic",
"Guillermo Hernangomez",
"PJ Washington",
"Robert Williams",
"RJ Barrett",
"Jaren Jackson Jr.",
"Glenn Robinson III",
"Wendell Carter Jr.",
"OG Anunoby",
"P.J. Tucker",
"Michael Porter Jr.",
"Lonnie Walker IV",
"Derrick Jones Jr.",
"Kelly Oubre Jr.",
"Bradley Wanamaker",
"Timothe Luwawu",
"Otto Porter Jr.",
"Mo Bamba",
"Juan Hernangomez",
"Danuel House Jr.",
"Kevin Knox II",
"Gary Trent Jr.",
"KZ Okpala",
"DeAndre' Bembry",
"Shaq Harrison",
"Vernon Carey Jr.",
"R.J. Hampton",
"Marvin Bagley III",
"Kira Lewis Jr.",
"Larry Nance Jr.",
"Tim Hardaway Jr.",
"Dennis Smith Jr.",
"Kevin Porter Jr.",
"CJ McCollum",
"J.J. Redick",
"James Ennis III",
"Marcus Morris Sr.",
"Kevin Porter Jr",
"KJ Martin",
"Gary Payton II",
"David Duke Jr.",
"Brandon Boston Jr.",
"Herbert Jones",
"Duane Washington Jr.",
"Derrick Walton",
"Cam Thomas",
"Nic Claxton",
"Jabari Smith Jr.",
"Jabari Smith Jr.",
"Alperen Sengun",
"Kristaps Porzingis",
"Juancho Hernangomez",
"Nikola Jovic",
"AJ Green",
'Nikola Jokic',
'Jusuf Nurkic',
'Jonas Valanciunas',
'Dennis Schroder',
'Bogdan Bogdanovic',
'KJ Martin',
'Trey Murphy III',
'Vlatko Cancar',
'MarJon Beauchamp',
'Goran Dragic'
]
try:
for checkVar in range(len(wrongNames)):
projection_data['Player'] = projection_data['Player'].replace(wrongNames, correctNames)
except:
for checkVar in range(len(wrongNames)):
projection_data['Name'] = projection_data['Name'].replace(wrongNames, correctNames)
return projection_data
def clean_API_data():
optimizer_data = grab_optimizer_data(Optimizer_URL)
projection_data = grab_projection_data(Projection_URL)
player_data = grab_player_data(Player_data_URL)
final_data = player_data
final_data.rename(columns={"DK Max": "DK_Max", "DK Ceiling": "DK_Ceiling", "Median Value": "Median_Value", "Ceiling Value": "Ceiling_Value", "Max Value": "Max_Value"}, inplace = True)
projection_data = projection_data.loc[projection_data['Fantasy'] > 0]
projection_data.rename(columns={"Name": "Player", "Fantasy": "Median"}, inplace = True)
pos_dict = dict(zip(optimizer_data.Player, optimizer_data.Position))
salary_dict = dict(zip(optimizer_data.Player, optimizer_data.Salary))
own_dict = dict(zip(projection_data.Player, projection_data.Own))
min_dict = dict(zip(projection_data.Player, projection_data.Minutes))
team_dict = dict(zip(projection_data.Player, projection_data.Team))
player_own_dict = dict(zip(optimizer_data['Player'], optimizer_data['Own']))
player_proj_dict = dict(zip(optimizer_data['Player'], optimizer_data['Median']))
return projection_data, optimizer_data, pos_dict, salary_dict, own_dict, min_dict, team_dict, player_own_dict, player_proj_dict, final_data
check_list = []
lineup_display = []
rand_player = 0
boost_player = 0
salaryCut = 0
overall_data = clean_API_data()
projection_data = overall_data[0]
optimizer_data = overall_data[1]
pos_dict = overall_data[2]
salary_dict = overall_data[3]
own_dict = overall_data[4]
min_dict = overall_data[5]
team_dict = overall_data[6]
player_own_dict = overall_data[7]
player_proj_dict = overall_data[8]
final_data = overall_data[9]
DK_dict = dict(zip(final_data.Player, final_data.Median))
DK_max_dict = dict(zip(final_data.Player, final_data.DK_Max))
with tab1:
hold_container = st.empty()
if st.button("Refresh Table"):
overall_data = clean_API_data()
projection_data = overall_data[0]
optimizer_data = overall_data[1]
pos_dict = overall_data[2]
salary_dict = overall_data[3]
own_dict = overall_data[4]
min_dict = overall_data[5]
team_dict = overall_data[6]
player_own_dict = overall_data[7]
player_proj_dict = overall_data[8]
final_data = overall_data[9]
DK_dict = dict(zip(final_data.Player, final_data.Median))
DK_max_dict = dict(zip(final_data.Player, final_data.DK_Max))
optimizer_data = optimizer_data.round(2)
builder = GridOptionsBuilder.from_dataframe(optimizer_data)
builder.configure_pagination(enabled=True)
builder.configure_column('Median', editable=True)
proj_table = builder.build()
AgGrid(optimizer_data, gridOptions=proj_table)
csv_data = grab_csv_data(CSV_URL)
csv_merge = pd.merge(csv_data, projection_data, how='left', left_on=['Player'], right_on = ['Player'])
id_dict = dict(zip(csv_merge['Player'], csv_merge['Name + ID']))
with tab2:
col1, col2 = st.columns([1, 4])
with col2:
display_container = st.empty()
st.info('Note that this optimization process aims to create a large set of usable lineups, and not necessarily an exact amount.')
with col1:
if st.button("Refresh Data"):
overall_data = clean_API_data()
projection_data = overall_data[0]
optimizer_data = overall_data[1]
pos_dict = overall_data[2]
salary_dict = overall_data[3]
own_dict = overall_data[4]
min_dict = overall_data[5]
team_dict = overall_data[6]
player_own_dict = overall_data[7]
player_proj_dict = overall_data[8]
final_data = overall_data[9]
DK_dict = dict(zip(final_data.Player, final_data.Median))
DK_max_dict = dict(zip(final_data.Player, final_data.DK_Max))
func_choice_select = st.selectbox('Choose optimization', ('Cash', 'Small Field', 'Medium Field', 'Large Field'))
max_sal = st.number_input('Max Salary', min_value = 35000, max_value = 50000, value = 50000, step = 100)
min_sal = st.number_input('Min Salary', min_value = 35000, max_value = 49900, value = 49000, step = 100)
proj_cut = st.number_input('Lowest median allowed', min_value = 0, max_value = 25, value = 10, step = 1)
ceiling_var = st.number_input('Relative ceiling above:', min_value = 0.0, max_value = 10.0, value = 6.5, step = .1)
slack_var = st.number_input('Median Variance in Sims', min_value = 0, max_value = 5, value = 0, step = 1)
totalRuns_raw = st.number_input('How many Sims', min_value = 1, max_value = 1000, value = 5, step = 1)
avoid_teams = st.multiselect('Select teams to exclude', options = optimizer_data['Team'].unique())
trim_true = 0
own_trim_var = 50
trim_var = 5
trim_dudes = trim_var
if func_choice_select == 'Cash':
func_var = 0
elif func_choice_select == 'Small Field':
func_var = 1
elif func_choice_select == 'Medium Field':
func_var = 2
elif func_choice_select == 'Large Field':
func_var = 2
totalRuns = totalRuns_raw * 5 * (func_var + 1)
cut_group_1 = []
cut_group_2 = []
force_group_1 = []
force_group_2 = []
avoid_players = []
lock_player = []
lineups = []
player_pool_raw = []
player_pool = []
player_count = []
player_trim_pool = []
portfolio = pd.DataFrame()
x = 1
if st.button('Optimize'):
max_proj = 1000
max_own = 1000
total_proj = 0
total_own = 0
with col2:
with st.spinner('Wait for it...'):
with hold_container.container():
while x <= totalRuns:
if x > 1:
if trim_var > 0:
for p_var in range(0,8):
try:
player_pool_raw.append(lineup_final[p_var][0])
except:
pass
[player_pool.append(x) for x in player_pool_raw if x not in player_pool]
for c_var in range(0,len(player_pool)):
player_count.append(player_pool_raw.count(player_pool[c_var]))
player_trim_pool = pd.DataFrame(player_pool, columns = ['Player'])
player_trim_pool['instances'] = player_count
player_trim_pool_check = player_trim_pool
player_trim_pool = player_trim_pool.nlargest(trim_var, ['instances'])
if len(player_trim_pool) > 0:
player_trim_raw = player_trim_pool.sample(n=trim_dudes)
player_trim_list = player_trim_raw['Player'].tolist()
elif trim_var == 0:
player_trim_list = []
raw_proj_file = optimizer_data
raw_flex_file = raw_proj_file.dropna(how='all')
raw_flex_file = raw_flex_file.loc[raw_flex_file['Median'] > 0]
raw_flex_file = raw_flex_file.loc[raw_flex_file['Median'] > proj_cut]
flex_file = raw_flex_file
flex_file = flex_file[['Player', 'Team', 'Position', 'Salary', 'Median', 'Own', 'LevX', 'ValX']]
flex_file.rename(columns={"Position": "Pos", "Own": "Proj DK Own%"}, inplace = True)
flex_file['name_var'] = flex_file['Player']
flex_file['lock'] = flex_file['Player'].isin(lock_player)*1
if x > 1:
flex_file['trim'] = flex_file['Player'].isin(player_trim_list)*1
flex_file['force_group_1'] = flex_file['Player'].isin(force_group_1)*1
flex_file['force_group_2'] = flex_file['Player'].isin(force_group_2)*1
flex_file['cut_group_1'] = flex_file['Player'].isin(cut_group_1)*1
flex_file['cut_group_2'] = flex_file['Player'].isin(cut_group_2)*1
chalk_file = flex_file.sort_values(by='Proj DK Own%', ascending=False)
chalk_group_df = chalk_file.sample(n=10)
chalk_group = chalk_group_df['Player'].tolist()
flex_file['chalk_group'] = flex_file['Player'].isin(chalk_group)*1
lev_file = flex_file.sort_values(by='LevX', ascending=False)
lev_group_df = lev_file.sample(n=10)
lev_group = lev_group_df['Player'].tolist()
flex_file['lev_group'] = flex_file['Player'].isin(lev_group)*1
flex_file_check = flex_file
check_list.append(flex_file['Median'][4])
if len(avoid_players) > 0:
flex_file = flex_file.loc[~flex_file['Player'].isin(avoid_players)]
if len(avoid_teams) > 0:
flex_file = flex_file.loc[~flex_file['Team'].isin(avoid_teams)]
player_ids = flex_file.index
flex_file['DK Ceiling'] = flex_file['Player'].map(DK_dict)
flex_file['DK Max'] = flex_file['Player'].map(DK_max_dict)
flex_file['Ceiling Value'] = np.where(flex_file['Salary'] <=6000, flex_file['DK Ceiling'] / (flex_file['Salary']/1000), ceiling_var)
flex_file_ceilings = flex_file
flex_file = flex_file.loc[flex_file['Ceiling Value'] >= ceiling_var]
overall_players = flex_file[['Player']]
overall_players['player_var_add'] = flex_file.index
overall_players['player_var'] = 'player_vars_' + overall_players['player_var_add'].astype(str)
player_vars = pulp.LpVariable.dicts("player_vars", flex_file.index, 0, 1, pulp.LpInteger)
total_score = pulp.LpProblem("Fantasy_Points_Problem", pulp.LpMaximize)
player_match = dict(zip(overall_players['player_var'], overall_players['Player']))
player_index_match = dict(zip(overall_players['player_var'], overall_players['player_var_add']))
player_own = dict(zip(flex_file['Player'], flex_file['Proj DK Own%']))
player_sal = dict(zip(flex_file['Player'], flex_file['Salary']))
player_proj = dict(zip(flex_file['Player'], flex_file['Median']))
player_pos = dict(zip(flex_file['Player'], flex_file['Pos']))
obj_points = {idx: (flex_file['Median'][idx]) for idx in flex_file.index}
total_score += sum([player_vars[idx]*obj_points[idx] for idx in flex_file.index])
obj_points_max = {idx: (flex_file['Median'][idx]) for idx in flex_file.index}
obj_own_max = {idx: (flex_file['Proj DK Own%'][idx]) for idx in flex_file.index}
obj_salary = {idx: (flex_file['Salary'][idx]) for idx in flex_file.index}
total_score += pulp.lpSum([player_vars[idx]*obj_salary[idx] for idx in flex_file.index]) <= max_sal
total_score += pulp.lpSum([player_vars[idx]*obj_salary[idx] for idx in flex_file.index]) >= min_sal
if len(lock_player) > 0:
for flex in flex_file['lock'].unique():
sub_idx = flex_file[flex_file['lock'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) == len(lock_player)
if len(force_group_1) > 0:
for flex in flex_file['force_group_1'].unique():
sub_idx = flex_file[flex_file['force_group_1'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
if len(force_group_2) > 0:
for flex in flex_file['force_group_2'].unique():
sub_idx = flex_file[flex_file['force_group_2'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
if len(cut_group_1) > 0:
for flex in flex_file['cut_group_1'].unique():
sub_idx = flex_file[flex_file['cut_group_1'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 1
if len(cut_group_2) > 0:
for flex in flex_file['cut_group_2'].unique():
sub_idx = flex_file[flex_file['cut_group_2'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 1
if len(player_trim_pool) > 0:
for flex in flex_file['trim'].unique():
sub_idx = flex_file[flex_file['trim'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) == 0
if func_var > 0:
for flex in flex_file['lev_group'].unique():
sub_idx = flex_file[flex_file['lev_group'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= func_var
for flex in flex_file['chalk_group'].unique():
sub_idx = flex_file[flex_file['chalk_group'] == 1].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 6 - func_var
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("PG")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("SG")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("SF")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("PF")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("C")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("C")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("G")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'].str.contains("F")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'].str.contains("F")) | (flex_file['Pos'].str.contains("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] == ("PG")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] == ("SG")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] == ("SF")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] == ("PF")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] == ("C")].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 2
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'] == ("PF/C")) | (flex_file['Pos'] == ("C")) | (flex_file['Pos'] == ("PF")) | (flex_file['Pos'] == ("SF/PF"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 2
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'] == ("PG")) | (flex_file['Pos'] == ("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'] == ("SG")) | (flex_file['Pos'] == ("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'] == ("SF")) | (flex_file['Pos'] == ("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'] == ("PF")) | (flex_file['Pos'] == ("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[(flex_file['Pos'].str.contains("PF")) | (flex_file['Pos'] == ("C"))].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 4
for flex in flex_file['Pos'].unique():
sub_idx = flex_file[flex_file['Pos'] != "Var"].index
total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) == 8
player_count = []
player_trim = []
lineup_list = []
total_score += pulp.lpSum([player_vars[idx]*obj_points_max[idx] for idx in flex_file.index]) <= max_proj - .001
if trim_true == 1:
total_score += pulp.lpSum([player_vars[idx]*obj_points_max[idx] for idx in flex_file.index]) <= (max_own + int(own_trim_var)) - .01
total_score.solve()
for v in total_score.variables():
if v.varValue > 0:
lineup_list.append(v.name)
df = pd.DataFrame(lineup_list)
df['Names'] = df[0].map(player_match)
df['Cost'] = df['Names'].map(player_sal)
df['Proj'] = df['Names'].map(player_proj)
df['Own'] = df['Names'].map(player_own)
total_cost = sum(df['Cost'])
total_own = sum(df['Own'])
total_proj = sum(df['Proj'])
lineup_raw = pd.DataFrame(lineup_list)
lineup_raw['Names'] = lineup_raw[0].map(player_match)
lineup_raw['value'] = lineup_raw[0].map(player_index_match)
lineup_final = lineup_raw.sort_values(by=['value'])
del lineup_final[lineup_final.columns[0]]
del lineup_final[lineup_final.columns[1]]
lineup_final = lineup_final.reset_index(drop=True)
lineup_test = lineup_final
lineup_final = lineup_final.T
lineup_final['Cost'] = total_cost
lineup_final['Proj'] = total_proj
lineup_final['Own'] = total_own
if total_cost < 50001:
lineups.append(lineup_final)
lineup_test['Salary'] = lineup_test['Names'].map(player_sal)
lineup_test['Proj'] = lineup_test['Names'].map(player_proj)
lineup_test['Own'] = lineup_test['Names'].map(player_own)
lineup_test.loc['Column_Total'] = lineup_test.sum(numeric_only=True, axis=0)
lineup_display.append(lineup_test)
with col2:
with st.container():
st.table(lineup_test)
max_proj = total_proj
max_own = total_own
check_list.append(total_proj)
portfolio = portfolio.append(lineup_final, ignore_index = True)
x += 1
portfolio.rename(columns={0: "Player", 1: "Player", 2: "Player", 3: "Player", 4: "Player", 5: "Player", 6: "Player", 7: "Player"}, inplace = True)
portfolio = portfolio.dropna()
final_outcomes = portfolio
final_outcomes.columns = ['Player', 'Player.1', 'Player.2', 'Player.3', 'Player.4', 'Player.5', 'Player.6', 'Player.7', 'Cost', 'Proj', 'Own']
final_outcomes['pos.1'] = final_outcomes['Player'].map(pos_dict)
final_outcomes['pos.2'] = final_outcomes['Player.1'].map(pos_dict)
final_outcomes['pos.3'] = final_outcomes['Player.2'].map(pos_dict)
final_outcomes['pos.4'] = final_outcomes['Player.3'].map(pos_dict)
final_outcomes['pos.5'] = final_outcomes['Player.4'].map(pos_dict)
final_outcomes['pos.6'] = final_outcomes['Player.5'].map(pos_dict)
final_outcomes['pos.7'] = final_outcomes['Player.6'].map(pos_dict)
final_outcomes['pos.8'] = final_outcomes['Player.7'].map(pos_dict)
final_positions = final_outcomes[['pos.1','pos.2','pos.3','pos.4','pos.5','pos.6','pos.7','pos.8']]
final_outcomes['PG-count'] = final_positions.apply(lambda x: x.str.contains("PG").sum(), axis=1)
final_outcomes['SG-count'] = final_positions.apply(lambda x: x.str.contains("SG").sum(), axis=1)
final_outcomes['SF-count'] = final_positions.apply(lambda x: x.str.contains("SF").sum(), axis=1)
final_outcomes['PF-count'] = final_positions.apply(lambda x: x.str.contains("PF").sum(), axis=1)
final_outcomes['C-count'] = final_positions.apply(lambda x: x.str.contains("C").sum(), axis=1)
final_outcomes['two_c'] = final_positions.apply(lambda x: x.str.fullmatch("C").sum(), axis=1)
final_outcomes['two_pg'] = final_positions.apply(lambda x: x.str.fullmatch("PG").sum(), axis=1)
final_outcomes['two_sg'] = final_positions.apply(lambda x: x.str.fullmatch("SG").sum(), axis=1)
final_outcomes['two_sf'] = final_positions.apply(lambda x: x.str.fullmatch("SF").sum(), axis=1)
final_outcomes['two_pf'] = final_positions.apply(lambda x: x.str.fullmatch("PF").sum(), axis=1)
final_outcomes['SG/SF'] = final_positions.apply(lambda x: x.str.match("SG/SF").sum(), axis=1)
final_outcomes['SF/PF'] = final_positions.apply(lambda x: x.str.match("SF/PF").sum(), axis=1)
final_outcomes['PG_hard'] = final_positions.apply(lambda x: x.str.fullmatch("PG").sum(), axis=1)
final_outcomes['SG_hard'] = final_positions.apply(lambda x: x.str.fullmatch("SG").sum(), axis=1)
final_outcomes['SF_hard'] = final_positions.apply(lambda x: x.str.fullmatch("SF").sum(), axis=1)
final_outcomes['PF_hard'] = final_positions.apply(lambda x: x.str.fullmatch("PF").sum(), axis=1)
final_outcomes['PG'] = 0
final_outcomes['SG'] = 0
final_outcomes['SF'] = 0
final_outcomes['PF'] = 0
final_outcomes['C'] = 0
final_outcomes['G'] = 0
final_outcomes['F'] = 0
final_outcomes['UTIL'] = 0
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.1'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.2'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.1'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.3'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.2'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.4'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.3'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.5'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.4'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.6'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.5'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.7'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.6'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['C-count'] == 1) & (final_outcomes['pos.8'].str.contains("C")) & (final_outcomes['C'] == 0), final_outcomes['Player.7'], final_outcomes['C'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.1'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.2'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.3'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.4'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.5'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.6'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PG_hard'] == 3) & (final_outcomes['Player.7'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player']) & (final_outcomes['UTIL'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.1'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.1']) & (final_outcomes['UTIL'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.2'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.2']) & (final_outcomes['UTIL'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.3'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.3']) & (final_outcomes['UTIL'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.4'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.4']) & (final_outcomes['UTIL'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.5'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.5']) & (final_outcomes['UTIL'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.6'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.6']) & (final_outcomes['UTIL'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['PG_hard'] >= 2) & (final_outcomes['Player.7'].map(pos_dict) == 'PG') & (final_outcomes['PG'] != final_outcomes['Player.7']) & (final_outcomes['UTIL'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['G'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.1'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.2'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.3'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.4'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.5'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.6'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SG_hard'] == 3) & (final_outcomes['Player.7'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['UTIL'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.1'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['UTIL'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.2'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['UTIL'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.3'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['UTIL'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.4'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['UTIL'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.5'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['UTIL'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.6'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['UTIL'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['SG_hard'] >= 2) & (final_outcomes['Player.7'].map(pos_dict) == 'SG') & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['UTIL'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['G'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.1'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.2'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.3'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.4'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.5'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.6'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['SF_hard'] == 3) & (final_outcomes['Player.7'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['UTIL'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.1'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['UTIL'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.2'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['UTIL'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.3'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['UTIL'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.4'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['UTIL'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.5'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['UTIL'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.6'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['UTIL'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['SF_hard'] >= 2) & (final_outcomes['Player.7'].map(pos_dict) == 'SF') & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['UTIL'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['F'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.1'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.2'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.3'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.4'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.5'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.6'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['PF_hard'] == 3) & (final_outcomes['Player.7'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player']) & (final_outcomes['UTIL'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.1'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.1']) & (final_outcomes['UTIL'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.2'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.2']) & (final_outcomes['UTIL'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.3'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.3']) & (final_outcomes['UTIL'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.4'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.4']) & (final_outcomes['UTIL'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.5'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.5']) & (final_outcomes['UTIL'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.6'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.6']) & (final_outcomes['UTIL'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['PF_hard'] >= 2) & (final_outcomes['Player.7'].map(pos_dict) == 'PF') & (final_outcomes['PF'] != final_outcomes['Player.7']) & (final_outcomes['UTIL'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['F'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.1'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.2'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.3'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.4'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.5'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.6'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['two_c'] == 2) & (final_outcomes['Player.7'].map(pos_dict) == 'C') & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes['PG'] = np.where((final_outcomes['Player'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.1'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.1'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.1'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.1'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.1'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.1'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.1'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.1'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.1'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.2'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.2'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.2'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.2'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.2'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.2'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.2'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.2'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.2'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.3'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.3'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.3'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.3'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.3'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.3'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.3'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.3'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.3'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.4'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.4'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.4'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.4'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.4'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.4'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.4'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.4'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.4'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.5'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.5'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.5'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.5'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.5'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.5'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.5'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.5'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.5'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.6'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.6'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.6'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.6'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.6'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.6'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.6'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.6'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.6'], final_outcomes['C'])
final_outcomes['PG'] = np.where((final_outcomes['Player.7'].map(pos_dict) == 'PG') & (final_outcomes['PG'] == 0), final_outcomes['Player.7'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['Player.7'].map(pos_dict) == 'SG') & (final_outcomes['SG'] == 0), final_outcomes['Player.7'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['Player.7'].map(pos_dict) == 'SF') & (final_outcomes['SF'] == 0), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['Player.7'].map(pos_dict) == 'PF') & (final_outcomes['PF'] == 0), final_outcomes['Player.7'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['Player.7'].map(pos_dict) == 'C') & (final_outcomes['C'] == 0), final_outcomes['Player.7'], final_outcomes['C'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player'].map(pos_dict) == 'SF/PF'), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.1'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.2'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.3'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.4'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.5'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.6'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SG/SF'] == 1) & (final_outcomes['SF/PF'] == 1) & (final_outcomes['PF_hard'] >= 1) & (final_outcomes['Player.7'].map(pos_dict) == 'SF/PF'), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.1'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.2'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.1'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.3'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.2'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.4'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.3'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.5'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.4'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.6'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.5'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.7'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.6'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['PG-count'] == 1) & (final_outcomes['pos.8'].str.contains("PG")) & (final_outcomes['PG'] == 0), final_outcomes['Player.7'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.1'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.2'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.1'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.3'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.2'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.4'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.3'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.5'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.4'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.6'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.5'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.7'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.6'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['SG-count'] == 1) & (final_outcomes['pos.8'].str.contains("SG")) & (final_outcomes['SG'] == 0), final_outcomes['Player.7'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.1'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.2'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.3'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.4'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.5'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.6'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.7'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['SF-count'] == 1) & (final_outcomes['pos.8'].str.contains("SF")) & (final_outcomes['SF'] == 0), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.1'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.2'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.1'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.3'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.2'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.4'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.3'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.5'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.4'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.6'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.5'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.7'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.6'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['PF-count'] == 1) & (final_outcomes['pos.8'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player.7'], final_outcomes['PF'])
# #---------- AFTER CHECKING FOR SINGLE INSTANCE POSITIONS ----------#
final_outcomes['PG'] = np.where((final_outcomes['pos.1'].str.contains("PG")) & (final_outcomes['pos.1'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.2'].str.contains("PG")) & (final_outcomes['pos.2'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.1'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.3'].str.contains("PG")) & (final_outcomes['pos.3'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.2'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.4'].str.contains("PG")) & (final_outcomes['pos.4'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.3'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.5'].str.contains("PG")) & (final_outcomes['pos.5'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.4'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.6'].str.contains("PG")) & (final_outcomes['pos.6'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.5'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.7'].str.contains("PG")) & (final_outcomes['pos.7'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.6'], final_outcomes['PG'])
final_outcomes['PG'] = np.where((final_outcomes['pos.8'].str.contains("PG")) & (final_outcomes['pos.8'] == "PG/SG") & (final_outcomes['PG'] == 0), final_outcomes['Player.7'], final_outcomes['PG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.1'].str.contains("SG")) & (final_outcomes['pos.1'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.2'].str.contains("SG")) & (final_outcomes['pos.2'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.3'].str.contains("SG")) & (final_outcomes['pos.3'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.4'].str.contains("SG")) & (final_outcomes['pos.4'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.5'].str.contains("SG")) & (final_outcomes['pos.5'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.6'].str.contains("SG")) & (final_outcomes['pos.6'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.7'].str.contains("SG")) & (final_outcomes['pos.7'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.8'].str.contains("SG")) & (final_outcomes['pos.8'] == "PG/SG") & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.1'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.2'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.3'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.4'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.5'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.6'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.7'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['SG'])
final_outcomes['SG'] = np.where((final_outcomes['pos.8'].str.contains("SG")) & (final_outcomes['SG'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['SG'])
final_outcomes['SF'] = np.where((final_outcomes['pos.1'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.2'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.3'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.4'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.5'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.6'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.7'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.8'] == ("SG/SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.1'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.2'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.3'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.4'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.5'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.6'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.7'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.8'] == ("SF/PF")) & (final_outcomes['PF_hard'] == 1) & (final_outcomes['SF'] == 0), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.1'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.2'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.3'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.4'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.5'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.6'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.7'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.8'] == ("SF/PF")) & (final_outcomes['C-count'] == 4) & (final_outcomes['SF'] == 0), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.1'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['PG'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.2'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['PG'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.3'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['PG'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.4'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['PG'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.5'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['PG'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.6'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['PG'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.7'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['PG'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['SF'])
final_outcomes['SF'] = np.where((final_outcomes['pos.8'].str.contains("SF")) & (final_outcomes['SF'] == 0) & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['PG'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['SF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.1'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.2'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.3'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.4'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.5'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.6'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.7'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['PF'])
final_outcomes['PF'] = np.where((final_outcomes['pos.8'].str.contains("PF")) & (final_outcomes['PF'] == 0) & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['PF'])
final_outcomes['C'] = np.where((final_outcomes['pos.1'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.2'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.3'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.4'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.5'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.6'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.7'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['C'])
final_outcomes['C'] = np.where((final_outcomes['pos.8'].str.contains("C")) & (final_outcomes['C'] == 0) & (final_outcomes['PF'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['C'])
#---------- AFTER UNIQUE POSITIONS ARE FILLED ----------#
final_outcomes['G'] = np.where((final_outcomes['pos.1'].str.contains("G")) & (~final_outcomes['pos.1'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player']) & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['PF'] != final_outcomes['Player']) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.2'].str.contains("G")) & (~final_outcomes['pos.2'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.1']) & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['PF'] != final_outcomes['Player.1']) & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.3'].str.contains("G")) & (~final_outcomes['pos.3'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.2']) & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['PF'] != final_outcomes['Player.2']) & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.4'].str.contains("G")) & (~final_outcomes['pos.4'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.3']) & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['PF'] != final_outcomes['Player.3']) & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.5'].str.contains("G")) & (~final_outcomes['pos.5'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.4']) & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['PF'] != final_outcomes['Player.4']) & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.6'].str.contains("G")) & (~final_outcomes['pos.6'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.5']) & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['PF'] != final_outcomes['Player.5']) & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.7'].str.contains("G")) & (~final_outcomes['pos.7'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.6']) & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['PF'] != final_outcomes['Player.6']) & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.8'].str.contains("G")) & (~final_outcomes['pos.8'].str.contains("F")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.7']) & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['PF'] != final_outcomes['Player.7']) & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.1'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player']) & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['PF'] != final_outcomes['Player']) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.2'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.1']) & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['PF'] != final_outcomes['Player.1']) & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.3'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.2']) & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['PF'] != final_outcomes['Player.2']) & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.4'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.3']) & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['PF'] != final_outcomes['Player.3']) & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.5'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.4']) & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['PF'] != final_outcomes['Player.4']) & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.6'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.5']) & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['PF'] != final_outcomes['Player.5']) & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.7'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.6']) & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['PF'] != final_outcomes['Player.6']) & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['G'])
final_outcomes['G'] = np.where((final_outcomes['pos.8'].str.contains("G")) & (final_outcomes['G'] == 0) & (final_outcomes['PG'] != final_outcomes['Player.7']) & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['PF'] != final_outcomes['Player.7']) & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['G'])
final_outcomes['F'] = np.where((final_outcomes['pos.1'].str.contains("F")) & (~final_outcomes['pos.1'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player']) & (final_outcomes['PG'] != final_outcomes['Player']) & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['PF'] != final_outcomes['Player']) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.2'].str.contains("F")) & (~final_outcomes['pos.2'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.1']) & (final_outcomes['PG'] != final_outcomes['Player.1']) & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['PF'] != final_outcomes['Player.1']) & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.3'].str.contains("F")) & (~final_outcomes['pos.3'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.2']) & (final_outcomes['PG'] != final_outcomes['Player.2']) & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['PF'] != final_outcomes['Player.2']) & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.4'].str.contains("F")) & (~final_outcomes['pos.4'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.3']) & (final_outcomes['PG'] != final_outcomes['Player.3']) & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['PF'] != final_outcomes['Player.3']) & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.5'].str.contains("F")) & (~final_outcomes['pos.5'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.4']) & (final_outcomes['PG'] != final_outcomes['Player.4']) & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['PF'] != final_outcomes['Player.4']) & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.6'].str.contains("F")) & (~final_outcomes['pos.6'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.5']) & (final_outcomes['PG'] != final_outcomes['Player.5']) & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['PF'] != final_outcomes['Player.5']) & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.7'].str.contains("F")) & (~final_outcomes['pos.7'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.6']) & (final_outcomes['PG'] != final_outcomes['Player.6']) & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['PF'] != final_outcomes['Player.6']) & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.8'].str.contains("F")) & (~final_outcomes['pos.8'].str.contains("G")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.7']) & (final_outcomes['PG'] != final_outcomes['Player.7']) & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['PF'] != final_outcomes['Player.7']) & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.1'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player']) & (final_outcomes['PG'] != final_outcomes['Player']) & (final_outcomes['SG'] != final_outcomes['Player']) & (final_outcomes['SF'] != final_outcomes['Player']) & (final_outcomes['PF'] != final_outcomes['Player']) & (final_outcomes['C'] != final_outcomes['Player']), final_outcomes['Player'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.2'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.1']) & (final_outcomes['PG'] != final_outcomes['Player.1']) & (final_outcomes['SG'] != final_outcomes['Player.1']) & (final_outcomes['SF'] != final_outcomes['Player.1']) & (final_outcomes['PF'] != final_outcomes['Player.1']) & (final_outcomes['C'] != final_outcomes['Player.1']), final_outcomes['Player.1'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.3'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.2']) & (final_outcomes['PG'] != final_outcomes['Player.2']) & (final_outcomes['SG'] != final_outcomes['Player.2']) & (final_outcomes['SF'] != final_outcomes['Player.2']) & (final_outcomes['PF'] != final_outcomes['Player.2']) & (final_outcomes['C'] != final_outcomes['Player.2']), final_outcomes['Player.2'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.4'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.3']) & (final_outcomes['PG'] != final_outcomes['Player.3']) & (final_outcomes['SG'] != final_outcomes['Player.3']) & (final_outcomes['SF'] != final_outcomes['Player.3']) & (final_outcomes['PF'] != final_outcomes['Player.3']) & (final_outcomes['C'] != final_outcomes['Player.3']), final_outcomes['Player.3'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.5'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.4']) & (final_outcomes['PG'] != final_outcomes['Player.4']) & (final_outcomes['SG'] != final_outcomes['Player.4']) & (final_outcomes['SF'] != final_outcomes['Player.4']) & (final_outcomes['PF'] != final_outcomes['Player.4']) & (final_outcomes['C'] != final_outcomes['Player.4']), final_outcomes['Player.4'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.6'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.5']) & (final_outcomes['PG'] != final_outcomes['Player.5']) & (final_outcomes['SG'] != final_outcomes['Player.5']) & (final_outcomes['SF'] != final_outcomes['Player.5']) & (final_outcomes['PF'] != final_outcomes['Player.5']) & (final_outcomes['C'] != final_outcomes['Player.5']), final_outcomes['Player.5'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.7'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.6']) & (final_outcomes['PG'] != final_outcomes['Player.6']) & (final_outcomes['SG'] != final_outcomes['Player.6']) & (final_outcomes['SF'] != final_outcomes['Player.6']) & (final_outcomes['PF'] != final_outcomes['Player.6']) & (final_outcomes['C'] != final_outcomes['Player.6']), final_outcomes['Player.6'], final_outcomes['F'])
final_outcomes['F'] = np.where((final_outcomes['pos.8'].str.contains("F")) & (final_outcomes['F'] == 0) & (final_outcomes['G'] != final_outcomes['Player.7']) & (final_outcomes['PG'] != final_outcomes['Player.7']) & (final_outcomes['SG'] != final_outcomes['Player.7']) & (final_outcomes['SF'] != final_outcomes['Player.7']) & (final_outcomes['PF'] != final_outcomes['Player.7']) & (final_outcomes['C'] != final_outcomes['Player.7']), final_outcomes['Player.7'], final_outcomes['F'])
# #---------- FILL UNIQUE ----------#
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player'])
& (final_outcomes['SG'] != final_outcomes['Player'])
& (final_outcomes['SF'] != final_outcomes['Player'])
& (final_outcomes['PF'] != final_outcomes['Player'])
& (final_outcomes['C'] != final_outcomes['Player'])
& (final_outcomes['G'] != final_outcomes['Player'])
& (final_outcomes['F'] != final_outcomes['Player'])
, final_outcomes['Player'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.1'])
& (final_outcomes['SG'] != final_outcomes['Player.1'])
& (final_outcomes['SF'] != final_outcomes['Player.1'])
& (final_outcomes['PF'] != final_outcomes['Player.1'])
& (final_outcomes['C'] != final_outcomes['Player.1'])
& (final_outcomes['G'] != final_outcomes['Player.1'])
& (final_outcomes['F'] != final_outcomes['Player.1'])
, final_outcomes['Player.1'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.2'])
& (final_outcomes['SG'] != final_outcomes['Player.2'])
& (final_outcomes['SF'] != final_outcomes['Player.2'])
& (final_outcomes['PF'] != final_outcomes['Player.2'])
& (final_outcomes['C'] != final_outcomes['Player.2'])
& (final_outcomes['G'] != final_outcomes['Player.2'])
& (final_outcomes['F'] != final_outcomes['Player.2'])
, final_outcomes['Player.2'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.3'])
& (final_outcomes['SG'] != final_outcomes['Player.3'])
& (final_outcomes['SF'] != final_outcomes['Player.3'])
& (final_outcomes['PF'] != final_outcomes['Player.3'])
& (final_outcomes['C'] != final_outcomes['Player.3'])
& (final_outcomes['G'] != final_outcomes['Player.3'])
& (final_outcomes['F'] != final_outcomes['Player.3'])
, final_outcomes['Player.3'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.4'])
& (final_outcomes['SG'] != final_outcomes['Player.4'])
& (final_outcomes['SF'] != final_outcomes['Player.4'])
& (final_outcomes['PF'] != final_outcomes['Player.4'])
& (final_outcomes['C'] != final_outcomes['Player.4'])
& (final_outcomes['G'] != final_outcomes['Player.4'])
& (final_outcomes['F'] != final_outcomes['Player.4'])
, final_outcomes['Player.4'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.5'])
& (final_outcomes['SG'] != final_outcomes['Player.5'])
& (final_outcomes['SF'] != final_outcomes['Player.5'])
& (final_outcomes['PF'] != final_outcomes['Player.5'])
& (final_outcomes['C'] != final_outcomes['Player.5'])
& (final_outcomes['G'] != final_outcomes['Player.5'])
& (final_outcomes['F'] != final_outcomes['Player.5'])
, final_outcomes['Player.5'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.6'])
& (final_outcomes['SG'] != final_outcomes['Player.6'])
& (final_outcomes['SF'] != final_outcomes['Player.6'])
& (final_outcomes['PF'] != final_outcomes['Player.6'])
& (final_outcomes['C'] != final_outcomes['Player.6'])
& (final_outcomes['G'] != final_outcomes['Player.6'])
& (final_outcomes['F'] != final_outcomes['Player.6'])
, final_outcomes['Player.6'], final_outcomes['UTIL'])
final_outcomes['UTIL'] = np.where((final_outcomes['UTIL'] == 0)
& (final_outcomes['PG'] != final_outcomes['Player.7'])
& (final_outcomes['SG'] != final_outcomes['Player.7'])
& (final_outcomes['SF'] != final_outcomes['Player.7'])
& (final_outcomes['PF'] != final_outcomes['Player.7'])
& (final_outcomes['C'] != final_outcomes['Player.7'])
& (final_outcomes['G'] != final_outcomes['Player.7'])
& (final_outcomes['F'] != final_outcomes['Player.7'])
, final_outcomes['Player.7'], final_outcomes['UTIL'])
final_outcomes = final_outcomes.loc[final_outcomes['two_c'] <= 2]
final_sorted_outcomes = final_outcomes[['PG', 'SG', 'SF', 'PF', 'C', 'G', 'F', 'UTIL']]
final_sorted_outcomes.rename(columns={"PG": "Player", "SG": "Player.1", "SF": "Player.2", "PF": "Player.3", "C": "Player.4", "G": "Player.5", "F": "Player.6", "UTIL": "Player.7"}, inplace = True)
final_sorted_outcomes['Salary'] = sum([final_sorted_outcomes['Player'].map(salary_dict),
final_sorted_outcomes['Player.1'].map(salary_dict),
final_sorted_outcomes['Player.2'].map(salary_dict),
final_sorted_outcomes['Player.3'].map(salary_dict),
final_sorted_outcomes['Player.4'].map(salary_dict),
final_sorted_outcomes['Player.5'].map(salary_dict),
final_sorted_outcomes['Player.6'].map(salary_dict),
final_sorted_outcomes['Player.7'].map(salary_dict)])
final_sorted_outcomes['Proj'] = sum([final_sorted_outcomes['Player'].map(player_proj_dict),
final_sorted_outcomes['Player.1'].map(player_proj_dict),
final_sorted_outcomes['Player.2'].map(player_proj_dict),
final_sorted_outcomes['Player.3'].map(player_proj_dict),
final_sorted_outcomes['Player.4'].map(player_proj_dict),
final_sorted_outcomes['Player.5'].map(player_proj_dict),
final_sorted_outcomes['Player.6'].map(player_proj_dict),
final_sorted_outcomes['Player.7'].map(player_proj_dict)])
final_sorted_outcomes['Proj Own%'] = sum([final_sorted_outcomes['Player'].map(player_own_dict),
final_sorted_outcomes['Player.1'].map(player_own_dict),
final_sorted_outcomes['Player.2'].map(player_own_dict),
final_sorted_outcomes['Player.3'].map(player_own_dict),
final_sorted_outcomes['Player.4'].map(player_own_dict),
final_sorted_outcomes['Player.5'].map(player_own_dict),
final_sorted_outcomes['Player.6'].map(player_own_dict),
final_sorted_outcomes['Player.7'].map(player_own_dict)])
sort_df = final_sorted_outcomes.sort_values(by='Proj', ascending=False)
sort_df = sort_df.reset_index()
sort_df = sort_df.drop(['index'], axis=1)
display_frame = sort_df.apply(pd.to_numeric, errors='ignore')
display_frame = display_frame.drop_duplicates(subset=['Proj'])
display_frame = display_frame.round(2)
with col1:
final_outcomes = display_frame
final_outcomes.rename(columns={'Player': 'Player_1', 'Player.1': 'Player_2', 'Player.2': 'Player_3', 'Player.3': 'Player_4', 'Player.4': 'Player_5', 'Player.5': 'Player_6', 'Player.6': 'Player_7', 'Player.7': 'Player_8'}, inplace = True)
final_outcomes['p1 id'] = final_outcomes['Player_1'].map(id_dict)
final_outcomes['p2 id'] = final_outcomes['Player_2'].map(id_dict)
final_outcomes['p3 id'] = final_outcomes['Player_3'].map(id_dict)
final_outcomes['p4 id'] = final_outcomes['Player_4'].map(id_dict)
final_outcomes['p5 id'] = final_outcomes['Player_5'].map(id_dict)
final_outcomes['p6 id'] = final_outcomes['Player_6'].map(id_dict)
final_outcomes['p7 id'] = final_outcomes['Player_7'].map(id_dict)
final_outcomes['p8 id'] = final_outcomes['Player_8'].map(id_dict)
final_outcomes = final_outcomes[['p1 id', 'p2 id', 'p3 id', 'p4 id', 'p5 id', 'p6 id', 'p7 id', 'p8 id']]
with col1:
st.download_button(
label="Export Lineups",
data=convert_df_to_csv(final_outcomes),
file_name='NBA_DFS_export.csv',
mime='text/csv',
)
with hold_container:
hold_container = st.empty()