DFS_Portfolio_Manager / global_func /large_field_preset.py
James McCool
Add volatility preset option in app.py and implement volatility_preset function. Updated lineup generation logic to include new preset for enhanced lineup edge management.
cc0edce
raw
history blame
1.47 kB
import pandas as pd
import numpy as np
def large_field_preset(portfolio: pd.DataFrame, lineup_target: int, exclude_cols: list):
excluded_cols = ['salary', 'median', 'Own', 'Finish_percentile', 'Dupes', 'Stack', 'Size', 'Win%', 'Lineup Edge', 'Weighted Own', 'Geomean', 'Similarity Score']
player_columns = [col for col in portfolio.columns if col not in excluded_cols]
concat_portfolio = portfolio.copy()
concat_portfolio = concat_portfolio.sort_values(by='Similarity Score', ascending=True).reset_index(drop=True)
# Calculate target similarity scores for linear progression
similarity_floor = concat_portfolio['Similarity Score'].min()
similarity_ceiling = concat_portfolio['Similarity Score'].max()
# Create evenly spaced target similarity scores
target_similarities = np.linspace(similarity_floor, similarity_ceiling, lineup_target)
# Find the closest lineup to each target similarity score
selected_indices = []
for target_sim in target_similarities:
# Find the index of the closest similarity score
closest_idx = (concat_portfolio['Similarity Score'] - target_sim).abs().idxmin()
if closest_idx not in selected_indices: # Avoid duplicates
selected_indices.append(closest_idx)
# Select the lineups
concat_portfolio = concat_portfolio.loc[selected_indices].reset_index(drop=True)
return concat_portfolio.sort_values(by='median', ascending=False)