import pandas as pd | |
def create_player_comparison(df: pd.DataFrame, player_columns: list, entrants: list): | |
overall_players = pd.Series(list(df[player_columns].values.flatten())).value_counts() | |
contest_len = len(df) | |
set_frame = overall_players.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'}) | |
set_frame['Percent'] = set_frame['Count'] / contest_len | |
set_frame = set_frame[['Player', 'Percent']] | |
set_frame = set_frame.rename(columns={'Percent': f'Exposure Overall'}) | |
player_frame = set_frame | |
for each_user in entrants: | |
overall_players = pd.Series(list(df[df['BaseName'] == each_user][player_columns].values.flatten())).value_counts() | |
set_frame = overall_players.to_frame().reset_index().rename(columns={'index': 'Player', 'count': 'Count'}) | |
set_frame['Percent'] = set_frame['Count'] / len(df[df['BaseName'] == each_user]) | |
set_frame = set_frame[['Player', 'Percent']] | |
set_frame = set_frame.rename(columns={'Percent': f'Exposure {each_user}'}) | |
player_frame = pd.merge(player_frame, set_frame, on='Player', how='outer') | |
return player_frame.sort_values(by='Exposure Overall', ascending=False) |