diff --git "a/app.py" "b/app.py" --- "a/app.py" +++ "b/app.py" @@ -1,1464 +1,614 @@ -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' +for name in dir(): + if not name.startswith('_'): + del globals()[name] -@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') +import numpy as np +import pandas as pd +import streamlit as st +import gspread +import pulp +import random -@st.experimental_memo -def grab_csv_data(URL): - draftkings_data = pd.read_json(URL) - draftkings_data.rename(columns={"Name": "Player"}, inplace = True) +@st.cache_resource +def init_conn(): + scope = ['https://www.googleapis.com/auth/spreadsheets', + "https://www.googleapis.com/auth/drive"] + + credentials = { + "type": "service_account", + "project_id": "sheets-api-connect-378620", + "private_key_id": "1005124050c80d085e2c5b344345715978dd9cc9", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCtKa01beXwc88R\nnPZVQTNPVQuBnbwoOfc66gW3547ja/UEyIGAF112dt/VqHprRafkKGmlg55jqJNt\na4zceLKV+wTm7vBu7lDISTJfGzCf2TrxQYNqwMKE2LOjI69dBM8u4Dcb4k0wcp9v\ntW1ZzLVVuwTvmrg7JBHjiSaB+x5wxm/r3FOiJDXdlAgFlytzqgcyeZMJVKKBQHyJ\njEGg/1720A0numuOCt71w/2G0bDmijuj1e6tH32MwRWcvRNZ19K9ssyDz2S9p68s\nYDhIxX69OWxwScTIHLY6J2t8txf/XMivL/636fPlDADvBEVTdlT606n8CcKUVQeq\npUVdG+lfAgMBAAECggEAP38SUA7B69eTfRpo658ycOs3Amr0JW4H/bb1rNeAul0K\nZhwd/HnU4E07y81xQmey5kN5ZeNrD5EvqkZvSyMJHV0EEahZStwhjCfnDB/cxyix\nZ+kFhv4y9eK+kFpUAhBy5nX6T0O+2T6WvzAwbmbVsZ+X8kJyPuF9m8ldcPlD0sce\ntj8NwVq1ys52eosqs7zi2vjt+eMcaY393l4ls+vNq8Yf27cfyFw45W45CH/97/Nu\n5AmuzlCOAfFF+z4OC5g4rei4E/Qgpxa7/uom+BVfv9G0DIGW/tU6Sne0+37uoGKt\nW6DzhgtebUtoYkG7ZJ05BTXGp2lwgVcNRoPwnKJDxQKBgQDT5wYPUBDW+FHbvZSp\nd1m1UQuXyerqOTA9smFaM8sr/UraeH85DJPEIEk8qsntMBVMhvD3Pw8uIUeFNMYj\naLmZFObsL+WctepXrVo5NB6RtLB/jZYxiKMatMLUJIYtcKIp+2z/YtKiWcLnwotB\nWdCjVnPTxpkurmF2fWP/eewZ+wKBgQDRMtJg7etjvKyjYNQ5fARnCc+XsI3gkBe1\nX9oeXfhyfZFeBXWnZzN1ITgFHplDznmBdxAyYGiQdbbkdKQSghviUQ0igBvoDMYy\n1rWcy+a17Mj98uyNEfmb3X2cC6WpvOZaGHwg9+GY67BThwI3FqHIbyk6Ko09WlTX\nQpRQjMzU7QKBgAfi1iflu+q0LR+3a3vvFCiaToskmZiD7latd9AKk2ocsBd3Woy9\n+hXXecJHPOKV4oUJlJgvAZqe5HGBqEoTEK0wyPNLSQlO/9ypd+0fEnArwFHO7CMF\nycQprAKHJXM1eOOFFuZeQCaInqdPZy1UcV5Szla4UmUZWkk1m24blHzXAoGBAMcA\nyH4qdbxX9AYrC1dvsSRvgcnzytMvX05LU0uF6tzGtG0zVlub4ahvpEHCfNuy44UT\nxRWW/oFFaWjjyFxO5sWggpUqNuHEnRopg3QXx22SRRTGbN45li/+QAocTkgsiRh1\nqEcYZsO4mPCsQqAy6E2p6RcK+Xa+omxvSnVhq0x1AoGAKr8GdkCl4CF6rieLMAQ7\nLNBuuoYGaHoh8l5E2uOQpzwxVy/nMBcAv+2+KqHEzHryUv1owOi6pMLv7A9mTFoS\n18B0QRLuz5fSOsVnmldfC9fpUc6H8cH1SINZpzajqQA74bPwELJjnzrCnH79TnHG\nJuElxA33rFEjbgbzdyrE768=\n-----END PRIVATE KEY-----\n", + "client_email": "gspread-connection@sheets-api-connect-378620.iam.gserviceaccount.com", + "client_id": "106625872877651920064", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gspread-connection%40sheets-api-connect-378620.iam.gserviceaccount.com" + } + + gc = gspread.service_account_from_dict(credentials) + return gc + +gspreadcon = init_conn() + +dk_player_url = 'https://docs.google.com/spreadsheets/d/1Yq0vGriWK-bS79e-bD6_u9pqrYE6Yrlbb_wEkmH-ot0/edit#gid=172632260' + +@st.cache_data +def load_overall_stats(): + sh = gspreadcon.open_by_url(dk_player_url) + worksheet = sh.worksheet('DK_Build_Up') + raw_display = pd.DataFrame(worksheet.get_all_records()) + raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"}, inplace = True) + raw_display.replace("", 'Welp', inplace=True) + raw_display = raw_display.loc[raw_display['Player'] != 'Welp'] + raw_display = raw_display.loc[raw_display['Median'] > 0] + raw_display = raw_display.apply(pd.to_numeric, errors='ignore') + dk_raw = raw_display.sort_values(by='Median', ascending=False) - 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) + worksheet = sh.worksheet('FD_Build_Up') + raw_display = pd.DataFrame(worksheet.get_all_records()) + raw_display.rename(columns={"Name": "Player", "Nickname": "Player", "Fantasy": "Median"}, inplace = True) + raw_display.replace("", 'Welp', inplace=True) + raw_display = raw_display.loc[raw_display['Player'] != 'Welp'] + raw_display = raw_display.loc[raw_display['Median'] > 0] + raw_display = raw_display.apply(pd.to_numeric, errors='ignore') + fd_raw = raw_display.sort_values(by='Median', ascending=False) - 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'])) + worksheet = sh.worksheet('Player_Level_ROO') + raw_display = pd.DataFrame(worksheet.get_all_records()) + raw_display.replace("", 'Welp', inplace=True) + raw_display = raw_display.loc[raw_display['Player'] != 'Welp'] + raw_display = raw_display.loc[raw_display['Median'] > 0] + raw_display = raw_display.apply(pd.to_numeric, errors='ignore') + roo_raw = raw_display.sort_values(by='Median', ascending=False) - return projection_data, optimizer_data, pos_dict, salary_dict, own_dict, min_dict, team_dict, player_own_dict, player_proj_dict, final_data + worksheet = sh.worksheet('Timestamp') + timestamp = worksheet.acell('A1').value -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)) + return dk_raw, fd_raw, roo_raw, timestamp -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) +def convert_df_to_csv(df): + return df.to_csv().encode('utf-8') -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'])) +dk_raw, fd_raw, roo_raw, timestamp = load_overall_stats() +t_stamp = f"Last Update: " + str(timestamp) + f" CST" -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)) +tab1, tab2 = st.tabs(['Uploads and Info', 'Optimizer']) - 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()) +with tab1: + st.info("The Projections file can have any columns in any order, but must contain columns explicitly named: 'Player', 'Salary', 'Position', 'Team', 'Opp', 'Minutes', 'Median', 'Own'.") + col1, col2 = st.columns([1, 5]) - 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 = [] + with col1: + proj_file = st.file_uploader("Upload Projections File", key = 'proj_uploader') - player_pool = [] - player_count = [] - player_trim_pool = [] - portfolio = pd.DataFrame() - x = 1 + if proj_file is not None: + try: + proj_dataframe = pd.read_csv(proj_file) + except: + proj_dataframe = pd.read_excel(proj_file) + with col2: + if proj_file is not None: + st.dataframe(proj_dataframe.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True) - if st.button('Optimize'): - max_proj = 1000 - max_own = 1000 - total_proj = 0 - total_own = 0 +with tab2: + col1, col2 = st.columns([1, 5]) + with col1: + st.info(t_stamp) + if st.button("Load/Reset Data", key='reset1'): + st.cache_data.clear() + dk_raw, fd_raw, roo_raw, timestamp = load_overall_stats() + t_stamp = f"Last Update: " + str(timestamp) + f" CST" + for key in st.session_state.keys(): + del st.session_state[key] + + slate_var1 = st.radio("Which data are you loading?", ('Paydirt', 'User'), key='slate_var1') + site_var1 = st.radio("What site are you working with?", ('Draftkings', 'Fanduel'), key='site_var1') + if site_var1 == 'Draftkings': + if slate_var1 == 'User': + init_baselines = proj_dataframe + elif slate_var1 != 'User': + init_baselines = dk_raw + elif site_var1 == 'Fanduel': + if slate_var1 == 'User': + init_baselines = proj_dataframe + elif slate_var1 != 'User': + init_baselines = fd_raw + contest_var1 = st.selectbox("What contest type are you optimizing for?", ('Cash', 'Small Field GPP', 'Large Field GPP'), key='contest_var1') + split_var1 = st.radio("Are you running the full slate or certain games?", ('Full Slate Run', 'Specific Games'), key='split_var1') + if split_var1 == 'Specific Games': + team_var1 = st.multiselect('Which teams would you like to include in the optimization?', options = init_baselines['Team'].unique(), key='team_var1') + elif split_var1 == 'Full Slate Run': + team_var1 = init_baselines.Team.values.tolist() + lock_var1 = st.multiselect("Are there any players you want to use in all lineups (Lock Button)?", options = init_baselines['Player'].unique(), key='lock_var1') + avoid_var1 = st.multiselect("Are there any players you want to remove from the pool (Drop Button)?", options = init_baselines['Player'].unique(), key='avoid_var1') + linenum_var1 = st.number_input("How many lineups would you like to produce?", min_value = 1, max_value = 300, value = 20, step = 1, key='linenum_var1') + if site_var1 == 'Draftkings': + min_sal1 = st.number_input('Min Salary', min_value = 35000, max_value = 49900, value = 47000, step = 100, key='min_sal1') + max_sal1 = st.number_input('Max Salary', min_value = 35000, max_value = 50000, value = 50000, step = 100, key='max_sal1') + elif site_var1 == 'Fanduel': + min_sal1 = st.number_input('Min Salary', min_value = 45000, max_value = 54900, value = 52000, step = 100, key='min_sal1') + max_sal1 = st.number_input('Max Salary', min_value = 45000, max_value = 55000, value = 55000, step = 100, key='max_sal1') + with col2: + init_baselines = init_baselines[init_baselines['Team'].isin(team_var1)] + init_baselines = init_baselines[~init_baselines['Player'].isin(avoid_var1)] + ownframe = init_baselines.copy() + ownframe['Own'] = ownframe['Own%'] * (900 / ownframe['Own%'].sum()) + raw_baselines = ownframe[['Player', 'Salary', 'Position', 'Team', 'Opp', 'Line', 'PP Unit', 'Median', 'Own']] + raw_baselines = raw_baselines.sort_values(by='Median', ascending=False) + raw_baselines['lock'] = np.where(raw_baselines['Player'].isin(lock_var1), 1, 0) + st.session_state.export_baselines = raw_baselines.copy() + st.session_state.display_baselines = raw_baselines.copy() + + display_container = st.empty() + display_dl_container = st.empty() + optimize_container = st.empty() + download_container = st.empty() + freq_container = st.empty() - with col2: + if st.button('Optimize'): + max_proj = 1000 + max_own = 1000 + total_proj = 0 + total_own = 0 + + lineup_display = [] + check_list = [] + lineups = [] + portfolio = pd.DataFrame() + x = 1 + with st.spinner('Wait for it...'): - with hold_container.container(): - - while x <= totalRuns: + with optimize_container: + while x <= linenum_var1: + sorted_lineup = [] + p_used = [] + cvar = 0 + firvar = 0 + secvar = 0 + thirvar = 0 + + raw_proj_file = raw_baselines + raw_flex_file = raw_proj_file.dropna(how='all') + raw_flex_file = raw_flex_file.loc[raw_flex_file['Median'] > 0] + flex_file = raw_flex_file + flex_file.rename(columns={"Own": "Proj DK Own%"}, inplace = True) + flex_file['name_var'] = flex_file['Player'] + flex_file['lock'] = np.where(flex_file['Player'].isin(lock_var1), 1, 0) + player_ids = flex_file.index + + 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_team = dict(zip(flex_file['Player'], flex_file['Team'])) + player_pos = dict(zip(flex_file['Player'], flex_file['Position'])) + player_sal = dict(zip(flex_file['Player'], flex_file['Salary'])) + player_proj = dict(zip(flex_file['Player'], flex_file['Median'])) + + 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_sal1 + total_score += pulp.lpSum([player_vars[idx]*obj_salary[idx] for idx in flex_file.index]) >= min_sal1 + + if site_var1 == 'Draftkings': + 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_var1) - 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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] != "Var"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) == 8 - 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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "PG"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "SG"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3 - 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['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "SF"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "PF"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3 - 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['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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'].str.contains("PG")].index + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'].str.contains("G")].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['Position'].unique(): + sub_idx = flex_file[flex_file['Position'].str.contains("F")].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("F")].index - total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 3 + elif site_var1 == 'Fanduel': - 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['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_var1) - 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['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] != "Var"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) == 8 - for flex in flex_file['Pos'].unique(): - sub_idx = flex_file[flex_file['Pos'] == ("SG")].index + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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'] == ("SF")].index + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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'] == ("PF")].index + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "SF"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 3 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "C"].index total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) <= 2 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "PG"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "SG"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "SF"].index + total_score += pulp.lpSum([player_vars[idx] for idx in sub_idx]) >= 1 + + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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'] == ("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['Position'].unique(): + sub_idx = flex_file[flex_file['Position'] == "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'] == ("PF")) | (flex_file['Pos'] == ("C"))].index + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'].str.contains("G")].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 + for flex in flex_file['Position'].unique(): + sub_idx = flex_file[flex_file['Position'].str.contains("F")].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 + player_count = [] + player_trim = [] + lineup_list = [] + + if contest_var1 == 'Cash': + obj_points = {idx: (flex_file['Proj DK Own%'][idx]) for idx in flex_file.index} + total_score += sum([player_vars[idx]*obj_points[idx] for idx in flex_file.index]) + total_score += pulp.lpSum([player_vars[idx]*obj_points[idx] for idx in flex_file.index]) <= max_own - .001 + elif contest_var1 != 'Cash': + 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]) + total_score += pulp.lpSum([player_vars[idx]*obj_points[idx] for idx in flex_file.index]) <= max_proj - .01 + - if total_cost < 50001: - lineups.append(lineup_final) + 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) + + if site_var1 == 'Draftkings': + line_hold = lineup_final[['Names']] + line_hold['pos'] = line_hold['Names'].map(player_pos) - 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) + cvar = 0 + for pname in range(0,len(line_hold)): + if cvar == 2: + pname = len(line_hold) + elif cvar < 2: + if line_hold.iat[pname,1] == 'C': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + cvar = cvar + 1 + p_used.extend(sorted_lineup) + wvar = 0 + for pname in range(0,len(line_hold)): + if wvar == 3: + pname = len(line_hold) + elif wvar < 3: + if line_hold.iat[pname,1] in ['RW', 'LW', 'W']: + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + wvar = wvar + 1 + p_used.extend(sorted_lineup) + dvar = 0 + for pname in range(0,len(line_hold)): + if dvar == 2: + pname = len(line_hold) + elif dvar < 2: + if line_hold.iat[pname,1] == "D": + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + dvar = dvar + 1 + p_used.extend(sorted_lineup) - lineup_display.append(lineup_test) + for pname in range(0,len(line_hold)): + if line_hold.iat[pname,1] == 'G': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + p_used.extend(sorted_lineup) - 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 + for pname in range(0,len(line_hold)): + if line_hold.iat[pname,1] != 'G': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + p_used.extend(sorted_lineup) + + lineup_final['sorted'] = sorted_lineup + lineup_final = lineup_final.drop(columns=['Names']) + lineup_final.rename(columns={"sorted": "Names"}, inplace = True) + + elif site_var1 == 'Fanduel': + line_hold = lineup_final[['Names']] + line_hold['pos'] = line_hold['Names'].map(player_pos) + + cvar = 0 + for pname in range(0,len(line_hold)): + if cvar == 2: + pname = len(line_hold) + elif cvar < 2: + if line_hold.iat[pname,1] == 'C': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + cvar = cvar + 1 + p_used.extend(sorted_lineup) + wvar = 0 + for pname in range(0,len(line_hold)): + if wvar == 2: + pname = len(line_hold) + elif wvar < 2: + if line_hold.iat[pname,1] == 'W': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + wvar = wvar + 1 + p_used.extend(sorted_lineup) + dvar = 0 + for pname in range(0,len(line_hold)): + if dvar == 2: + pname = len(line_hold) + elif dvar < 2: + if line_hold.iat[pname,1] == "D": + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + dvar = dvar + 1 + p_used.extend(sorted_lineup) + + for pname in range(0,len(line_hold)): + if line_hold.iat[pname,1] != 'G': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + p_used.extend(sorted_lineup) + + for pname in range(0,len(line_hold)): + if line_hold.iat[pname,1] == 'G': + if line_hold.iat[pname,0] not in p_used: + sorted_lineup.append(line_hold.iat[pname,0]) + p_used.extend(sorted_lineup) + + lineup_final['sorted'] = sorted_lineup + lineup_final = lineup_final.drop(columns=['Names']) + lineup_final.rename(columns={"sorted": "Names"}, inplace = 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 + + lineup_test['Team'] = lineup_test['Names'].map(player_team) + lineup_test['Position'] = lineup_test['Names'].map(player_pos) + 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 = lineup_test.set_index('Names') + 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 = pd.concat([portfolio, lineup_final], ignore_index = True) + + x += 1 + + if site_var1 == 'Draftkings': + portfolio.rename(columns={0: "C1", 1: "C2", 2: "W1", 3: "W2", 4: "W3", 5: "D1", 6: "D2", 7: "G", 8: "UTIL"}, inplace = True) + elif site_var1 == 'Fanduel': + portfolio.rename(columns={0: "C1", 1: "C2", 2: "W1", 3: "W2", 4: "D1", 5: "D2", 6: "UTIL1", 7: "UTIL2", 8: "G"}, inplace = True) + portfolio = portfolio.dropna() + portfolio = portfolio.reset_index() + portfolio['Lineup_num'] = portfolio['index'] + 1 + portfolio.rename(columns={'Lineup_num': "Lineup"}, inplace = True) + portfolio = portfolio.set_index('Lineup') + portfolio = portfolio.drop(columns=['index']) + + st.session_state.portfolio = portfolio.drop_duplicates() + + st.session_state.final_outcomes = portfolio + + # if site_var1 == 'Draftkings': + # final_outcomes = portfolio[['C1', 'C2', 'W1', 'W2', 'W3', 'D1', 'D2', 'G', 'UTIL', 'Cost', 'Proj', 'Own']] - 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: + # final_outcomes_export = pd.DataFrame() + # final_outcomes_export['C1'] = final_outcomes['C1'] + # final_outcomes_export['C2'] = final_outcomes['C2'] + # final_outcomes_export['W1'] = final_outcomes['W1'] + # final_outcomes_export['W2'] = final_outcomes['W2'] + # final_outcomes_export['W3'] = final_outcomes['W3'] + # final_outcomes_export['D1'] = final_outcomes['D1'] + # final_outcomes_export['D2'] = final_outcomes['D2'] + # final_outcomes_export['G'] = final_outcomes['G'] + # final_outcomes_export['UTIL'] = final_outcomes['UTIL'] + # final_outcomes_export['Salary'] = final_outcomes['Cost'] + # final_outcomes_export['Own'] = final_outcomes['Own'] + # final_outcomes_export['Proj'] = final_outcomes['Proj'] + + # final_outcomes_export['C1'].replace(dkid_dict, inplace=True) + # final_outcomes_export['C2'].replace(dkid_dict, inplace=True) + # final_outcomes_export['W1'].replace(dkid_dict, inplace=True) + # final_outcomes_export['W2'].replace(dkid_dict, inplace=True) + # final_outcomes_export['W3'].replace(dkid_dict, inplace=True) + # final_outcomes_export['D1'].replace(dkid_dict, inplace=True) + # final_outcomes_export['D2'].replace(dkid_dict, inplace=True) + # final_outcomes_export['G'].replace(dkid_dict, inplace=True) + # final_outcomes_export['UTIL'].replace(dkid_dict, inplace=True) + + # st.session_state.final_outcomes_export = final_outcomes_export.copy() + # elif site_var1 == 'Fanduel': + # final_outcomes = portfolio[['C1', 'C2', 'W1', 'W2', 'D1', 'D2', 'UTIL1', 'UTIL2', 'G', 'Cost', 'Proj', 'Own']] + + # final_outcomes_export = pd.DataFrame() + # final_outcomes_export['C1'] = final_outcomes['C1'] + # final_outcomes_export['C2'] = final_outcomes['C2'] + # final_outcomes_export['W1'] = final_outcomes['W1'] + # final_outcomes_export['W2'] = final_outcomes['W2'] + # final_outcomes_export['D1'] = final_outcomes['D1'] + # final_outcomes_export['D2'] = final_outcomes['D2'] + # final_outcomes_export['UTIL1'] = final_outcomes['UTIL1'] + # final_outcomes_export['UTIL2'] = final_outcomes['UTIL2'] + # final_outcomes_export['G'] = final_outcomes['G'] + # final_outcomes_export['Salary'] = final_outcomes['Cost'] + # final_outcomes_export['Own'] = final_outcomes['Own'] + # final_outcomes_export['Proj'] = final_outcomes['Proj'] + + # final_outcomes_export['C1'].replace(fdid_dict, inplace=True) + # final_outcomes_export['C2'].replace(fdid_dict, inplace=True) + # final_outcomes_export['W1'].replace(fdid_dict, inplace=True) + # final_outcomes_export['W2'].replace(fdid_dict, inplace=True) + # final_outcomes_export['D1'].replace(fdid_dict, inplace=True) + # final_outcomes_export['D2'].replace(fdid_dict, inplace=True) + # final_outcomes_export['UTIL1'].replace(fdid_dict, inplace=True) + # final_outcomes_export['UTIL2'].replace(fdid_dict, inplace=True) + # final_outcomes_export['G'].replace(fdid_dict, inplace=True) + + # st.session_state.FD_final_outcomes_export = final_outcomes_export.copy() + + st.session_state.player_freq = pd.DataFrame(np.column_stack(np.unique(st.session_state.portfolio.iloc[:,0:8].values, return_counts=True)), + columns=['Player','Freq']).sort_values('Freq', ascending=False).reset_index(drop=True) + st.session_state.player_freq['Freq'] = st.session_state.player_freq['Freq'].astype(int) + st.session_state.player_freq['Position'] = st.session_state.player_freq['Player'].map(player_pos) + st.session_state.player_freq['Salary'] = st.session_state.player_freq['Player'].map(player_sal) + st.session_state.player_freq['Proj Own'] = st.session_state.player_freq['Player'].map(player_own) / 100 + st.session_state.player_freq['Exposure'] = st.session_state.player_freq['Freq']/(linenum_var1) + st.session_state.player_freq['Team'] = st.session_state.player_freq['Player'].map(player_team) + + st.session_state.player_freq = st.session_state.player_freq[['Player', 'Position', 'Team', 'Salary', 'Proj Own', 'Exposure']] + st.session_state.player_freq = st.session_state.player_freq.set_index('Player') + + with display_container: + display_container = st.empty() + if 'display_baselines' in st.session_state: + tab1, tab2 = st.tabs(['Line Combo ROO', 'Player Projections']) + with tab1: + st.dataframe(st.session_state.display_lines.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True) + with tab2: + st.dataframe(st.session_state.display_baselines.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True) + + with display_dl_container: + display_dl_container = st.empty() + if 'export_baselines' in st.session_state: st.download_button( - label="Export Lineups", - data=convert_df_to_csv(final_outcomes), - file_name='NBA_DFS_export.csv', + label="Export Projections", + data=convert_df_to_csv(st.session_state.export_baselines), + file_name='NHL_proj_export.csv', mime='text/csv', - ) - with hold_container: - hold_container = st.empty() \ No newline at end of file + ) + + with optimize_container: + optimize_container = st.empty() + if 'final_outcomes' in st.session_state: + st.dataframe(st.session_state.final_outcomes.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True) + + with download_container: + download_container = st.empty() + if site_var1 == 'Draftkings': + if 'final_outcomes_export' in st.session_state: + st.download_button( + label="Export Optimals", + data=convert_df_to_csv(st.session_state.final_outcomes_export), + file_name='NHL_optimals_export.csv', + mime='text/csv', + ) + elif site_var1 == 'Fanduel': + if 'FD_final_outcomes_export' in st.session_state: + st.download_button( + label="Export Optimals", + data=convert_df_to_csv(st.session_state.FD_final_outcomes_export), + file_name='FD_NHL_optimals_export.csv', + mime='text/csv', + ) + + with freq_container: + freq_container = st.empty() + if 'player_freq' in st.session_state: + st.dataframe(st.session_state.player_freq.style.background_gradient(axis=0).background_gradient(cmap='RdYlGn').format(precision=2), use_container_width = True) \ No newline at end of file