DFS_Contest_Analyzer / global_func /create_stack_exposures.py
James McCool
Fix missing newline at end of file in create_stack_exposures.py
3a5cf8f
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