|
import pandas as pd |
|
|
|
def create_general_exposures(df: pd.DataFrame, entrants: list = None): |
|
check_cols = ['salary', 'actual_fpts', 'actual_own', 'dupes'] |
|
general_exposures = pd.DataFrame() |
|
for each_col in check_cols: |
|
general_frame = pd.DataFrame() |
|
|
|
if entrants is not None: |
|
overall_general = pd.Series(list(df[df['BaseName'].isin(entrants)][each_col])).sum() |
|
else: |
|
overall_general = pd.Series(list(df[each_col])).sum() |
|
top_1per_general = pd.Series(list(df[df['percentile_finish'] <= 0.01][each_col])).sum() |
|
top_5per_general = pd.Series(list(df[df['percentile_finish'] <= 0.05][each_col])).sum() |
|
top_10per_general = pd.Series(list(df[df['percentile_finish'] <= 0.10][each_col])).sum() |
|
top_20per_general = pd.Series(list(df[df['percentile_finish'] <= 0.20][each_col])).sum() |
|
general_contest_len = len(df) |
|
general_len_1per = len(df[df['percentile_finish'] <= 0.01]) |
|
general_len_5per = len(df[df['percentile_finish'] <= 0.05]) |
|
general_len_10per = len(df[df['percentile_finish'] <= 0.10]) |
|
general_len_20per = len(df[df['percentile_finish'] <= 0.20]) |
|
each_set_name = ['Overall', ' Top 1%', ' Top 5%', 'Top 10%', 'Top 20%'] |
|
each_general_set = [overall_general, top_1per_general, top_5per_general, top_10per_general, top_20per_general] |
|
each_general_len_set = [general_contest_len, general_len_1per, general_len_5per, general_len_10per, general_len_20per] |
|
general_count_var = 0 |
|
for each_general in each_general_set: |
|
general_frame['Stat'] = [each_col] |
|
general_frame['Average'] = [each_general / each_general_len_set[general_count_var]] |
|
general_frame = general_frame.rename(columns={'Average': f'Average {each_set_name[general_count_var]}'}) |
|
if len(general_exposures) == 0: |
|
general_row = general_frame |
|
else: |
|
general_row = pd.merge(general_exposures, general_frame, on='Stat', how='outer') |
|
general_count_var += 1 |
|
if len(general_exposures) == 0: |
|
general_exposures = general_row |
|
else: |
|
general_exposures = pd.concat([general_exposures, general_frame], ignore_index = True, axis = 0) |
|
general_exposures = general_exposures.replace(['salary', 'actual_fpts', 'actual_own', 'dupes'], ['Salary Used', 'Finishing Points', 'Total Ownership', 'Duplications']) |
|
return general_exposures |