James McCool
Add stack exposure calculations and refactor player exposure handling in app.py
1748ccd
import pandas as pd | |
def create_stack_exposures(df: pd.DataFrame, entrants: list = None): | |
stack_exposures = pd.DataFrame() | |
if entrants is not None: | |
overall_stacks = pd.Series(list(df[df['BaseName'].isin(entrants)]['stack'])).value_counts() | |
else: | |
overall_stacks = pd.Series(list(df['stack'])).value_counts() | |
top_1per_stacks = pd.Series(list(df[df['percentile_finish'] <= 0.01]['stack'])).value_counts() | |
top_5per_stacks = pd.Series(list(df[df['percentile_finish'] <= 0.05]['stack'])).value_counts() | |
top_10per_stacks = pd.Series(list(df[df['percentile_finish'] <= 0.10]['stack'])).value_counts() | |
top_20per_stacks = pd.Series(list(df[df['percentile_finish'] <= 0.20]['stack'])).value_counts() | |
stacks_contest_len = len(df) | |
stacks_len_1per = len(df[df['percentile_finish'] <= 0.01]) | |
stacks_len_5per = len(df[df['percentile_finish'] <= 0.05]) | |
stacks_len_10per = len(df[df['percentile_finish'] <= 0.10]) | |
stacks_len_20per = len(df[df['percentile_finish'] <= 0.20]) | |
each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%'] | |
each_stacks_set = [overall_stacks, top_1per_stacks, top_5per_stacks, top_10per_stacks, top_20per_stacks] | |
each_stacks_len_set = [stacks_contest_len, stacks_len_1per, stacks_len_5per, stacks_len_10per, stacks_len_20per] | |
stack_count_var = 0 | |
for each_stack in each_stacks_set: | |
stack_frame = each_stack.to_frame().reset_index().rename(columns={'index': 'Stack', 'count': 'Count'}) | |
stack_frame['Percent'] = stack_frame['Count'] / each_stacks_len_set[stack_count_var] | |
stack_frame = stack_frame[['Stack', 'Percent']] | |
stack_frame = stack_frame.rename(columns={'Percent': f'Exposure {each_set_name[stack_count_var]}'}) | |
if len(stack_exposures) == 0: | |
stack_exposures = stack_frame | |
else: | |
stack_exposures = pd.merge(stack_exposures, stack_frame, on='Stack', how='outer') | |
stack_count_var += 1 | |
return stack_exposures |