import pandas as pd def create_general_comparison(df: pd.DataFrame, entrants: list = None): loop_list = ['Overall'] + entrants for entrant in loop_list: check_cols = ['salary', 'actual_fpts', 'actual_own', 'dupes', 'uniques', 'under_5', 'under_10'] general_exposures = pd.DataFrame() for each_col in check_cols: general_frame = pd.DataFrame() if entrant == 'Overall': overall_general = pd.Series(list(df[each_col])).sum() general_contest_len = len(df) else: overall_general = pd.Series(list(df[df['BaseName'] == entrant][each_col])).sum() general_contest_len = len(df[df['BaseName'] == entrant]) each_set_name = ['Overall'] each_general_set = [overall_general] each_general_len_set = [general_contest_len] general_count_var = 0 for each_general in each_general_set: general_frame['Stat'] = [each_col] try: general_frame['Average'] = [each_general / each_general_len_set[general_count_var]] except: general_frame['Average'] = [0] general_frame = general_frame.rename(columns={'Average': f'Average {entrant}'}) general_exposures = pd.concat([general_exposures, general_frame], ignore_index = True, axis = 0) general_exposures['Stat'] = general_exposures['Stat'].replace(['salary', 'actual_fpts', 'actual_own', 'dupes', 'uniques', 'under_5', 'under_10'], ['Salary Used', 'Finishing Points', 'Total Ownership', 'Duplications', 'Uniques', 'Under 5', 'Under 10']) if entrant == 'Overall': final_exposures = general_exposures else: final_exposures = pd.merge(final_exposures, general_exposures, on='Stat', how='outer') return final_exposures