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