DFS_Portfolio_Manager / global_func /distribute_preset.py
James McCool
Limit concatenation in distribute_preset function to the top 10 entries of the working portfolio, removing debug print statements for cleaner output and improved performance in portfolio processing.
42199ca
raw
history blame
2.25 kB
import pandas as pd
def distribute_preset(portfolio: pd.DataFrame, lineup_target: int, exclude_cols: list):
for slack_var in range(1, 20):
concat_portfolio = pd.DataFrame(columns=portfolio.columns)
for finishing_range in range(1, 20):
finish_threshold = (finishing_range / 100)
lower_threshold = ((finishing_range - 1) / 100)
rows_to_drop = []
working_portfolio = portfolio.copy()
if finishing_range == 1:
working_portfolio = working_portfolio[working_portfolio['Finish_percentile'] <= finish_threshold]
elif finishing_range == 20:
working_portfolio = working_portfolio[working_portfolio['Finish_percentile'] >= lower_threshold]
else:
working_portfolio = working_portfolio[working_portfolio['Finish_percentile'] <= finish_threshold]
working_portfolio = working_portfolio[working_portfolio['Finish_percentile'] >= lower_threshold]
working_portfolio = working_portfolio.sort_values(by='median', ascending = False)
working_portfolio = working_portfolio.reset_index(drop=True)
if len(working_portfolio) == 0:
continue
elif len(working_portfolio) >= 1:
curr_own_type_max = working_portfolio.loc[0, 'Weighted Own'] + (slack_var / 20 * working_portfolio.loc[0, 'Weighted Own'])
for i in range(1, len(working_portfolio)):
if working_portfolio.loc[i, 'Weighted Own'] > curr_own_type_max:
rows_to_drop.append(i)
else:
curr_own_type_max = working_portfolio.loc[i, 'Weighted Own'] + (slack_var / 20 * working_portfolio.loc[i, 'Weighted Own'])
working_portfolio = working_portfolio.drop(rows_to_drop).reset_index(drop=True)
concat_portfolio = pd.concat([concat_portfolio, working_portfolio.head(10)])
if len(concat_portfolio) >= lineup_target:
return concat_portfolio.sort_values(by='Finish_percentile', ascending=True).head(lineup_target)
return concat_portfolio.sort_values(by='Finish_percentile', ascending=True)