James McCool
commited on
Commit
·
690e673
1
Parent(s):
1165007
Enhance duplicate prediction logic in predict_dupes.py by introducing 'own_rank_percentile' calculation. This addition improves the accuracy of the dupes calculation by factoring in player ownership rankings, ensuring more precise predictions across different contest types.
Browse files- global_func/predict_dupes.py +19 -12
global_func/predict_dupes.py
CHANGED
@@ -295,7 +295,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
295 |
if type_var == 'Showdown':
|
296 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank']
|
297 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own']
|
298 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'own_ratio', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
299 |
# Get the original player columns (first 5 columns excluding salary, median, Own)
|
300 |
player_columns = [col for col in portfolio.columns[:5] if col not in ['salary', 'median', 'Own']]
|
301 |
|
@@ -326,6 +326,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
326 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
327 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
328 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
329 |
|
330 |
# Calculate dupes formula
|
331 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * (portfolio['Own'] / 100) * Contest_Size + ((portfolio['salary'] - (60000 - portfolio['Own'])) / 100) - ((60000 - portfolio['salary']) / 100)
|
@@ -335,13 +336,14 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
335 |
portfolio['Dupes'] = np.where(
|
336 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
337 |
0,
|
338 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
339 |
)
|
|
|
340 |
elif type_var == 'Classic':
|
341 |
num_players = len([col for col in portfolio.columns if col not in ['salary', 'median', 'Own']])
|
342 |
dup_count_columns = [f'player_{i}_percent_rank' for i in range(1, num_players + 1)]
|
343 |
own_columns = [f'player_{i}_own' for i in range(1, num_players + 1)]
|
344 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'own_ratio', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
345 |
# Get the original player columns (first num_players columns excluding salary, median, Own)
|
346 |
player_columns = [col for col in portfolio.columns[:num_players] if col not in ['salary', 'median', 'Own']]
|
347 |
|
@@ -353,6 +355,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
353 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
354 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
355 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
356 |
|
357 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (60000 - portfolio['Own'])) / 100) - ((60000 - portfolio['salary']) / 100)
|
358 |
portfolio['dupes_calc'] = portfolio['dupes_calc'] * dupes_multiplier * (portfolio['Own'] / (100 + (Contest_Size / 1000)))
|
@@ -360,7 +363,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
360 |
portfolio['Dupes'] = np.where(
|
361 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
362 |
0,
|
363 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
364 |
)
|
365 |
|
366 |
elif site_var == 'Draftkings':
|
@@ -371,7 +374,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
371 |
else:
|
372 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
|
373 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
|
374 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
375 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
376 |
player_columns = [col for col in portfolio.columns[:6] if col not in ['salary', 'median', 'Own']]
|
377 |
if sport_var == 'GOLF':
|
@@ -427,6 +430,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
427 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
428 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
429 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
430 |
|
431 |
# Calculate dupes formula
|
432 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 100) - ((50000 - portfolio['salary']) / 100)
|
@@ -436,13 +440,13 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
436 |
portfolio['Dupes'] = np.where(
|
437 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
438 |
0,
|
439 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
440 |
)
|
441 |
elif type_var == 'Classic':
|
442 |
if sport_var == 'CS2':
|
443 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
|
444 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
|
445 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
446 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
447 |
player_columns = [col for col in portfolio.columns[:6] if col not in ['salary', 'median', 'Own']]
|
448 |
|
@@ -474,6 +478,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
474 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
475 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
476 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
477 |
|
478 |
# Calculate dupes formula
|
479 |
portfolio['dupes_calc'] = ((portfolio['own_product'] * 10) * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 50) - ((50000 - portfolio['salary']) / 50)
|
@@ -483,12 +488,12 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
483 |
portfolio['Dupes'] = np.where(
|
484 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
485 |
0,
|
486 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
487 |
)
|
488 |
if sport_var == 'LOL':
|
489 |
dup_count_columns = ['CPT_Own_percent_rank', 'TOP_Own_percent_rank', 'JNG_Own_percent_rank', 'MID_Own_percent_rank', 'ADC_Own_percent_rank', 'SUP_Own_percent_rank', 'Team_Own_percent_rank']
|
490 |
own_columns = ['CPT_Own', 'TOP_Own', 'JNG_Own', 'MID_Own', 'ADC_Own', 'SUP_Own', 'Team_Own']
|
491 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
492 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
493 |
player_columns = [col for col in portfolio.columns[:7] if col not in ['salary', 'median', 'Own']]
|
494 |
|
@@ -523,6 +528,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
523 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
524 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
525 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
526 |
|
527 |
# Calculate dupes formula
|
528 |
portfolio['dupes_calc'] = ((portfolio['own_product'] * 10) * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 50) - ((50000 - portfolio['salary']) / 50)
|
@@ -532,13 +538,13 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
532 |
portfolio['Dupes'] = np.where(
|
533 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
534 |
0,
|
535 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
536 |
)
|
537 |
elif sport_var != 'CS2' and sport_var != 'LOL':
|
538 |
num_players = len([col for col in portfolio.columns if col not in ['salary', 'median', 'Own']])
|
539 |
dup_count_columns = [f'player_{i}_percent_rank' for i in range(1, num_players + 1)]
|
540 |
own_columns = [f'player_{i}_own' for i in range(1, num_players + 1)]
|
541 |
-
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
542 |
# Get the original player columns (first num_players columns excluding salary, median, Own)
|
543 |
player_columns = [col for col in portfolio.columns[:num_players] if col not in ['salary', 'median', 'Own']]
|
544 |
|
@@ -550,6 +556,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
550 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
551 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
552 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
|
|
553 |
|
554 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 100) - ((50000 - portfolio['salary']) / 100)
|
555 |
portfolio['dupes_calc'] = portfolio['dupes_calc'] * dupes_multiplier * (portfolio['Own'] / (100 + (Contest_Size / 1000)))
|
@@ -557,7 +564,7 @@ def predict_dupes(portfolio, maps_dict, site_var, type_var, Contest_Size, streng
|
|
557 |
portfolio['Dupes'] = np.where(
|
558 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
559 |
0,
|
560 |
-
np.round(portfolio['dupes_calc'], 0) - 1
|
561 |
)
|
562 |
|
563 |
portfolio['Dupes'] = np.round(portfolio['Dupes'], 0)
|
|
|
295 |
if type_var == 'Showdown':
|
296 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank']
|
297 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own']
|
298 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'own_ratio', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
299 |
# Get the original player columns (first 5 columns excluding salary, median, Own)
|
300 |
player_columns = [col for col in portfolio.columns[:5] if col not in ['salary', 'median', 'Own']]
|
301 |
|
|
|
326 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
327 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
328 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
329 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
330 |
|
331 |
# Calculate dupes formula
|
332 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * (portfolio['Own'] / 100) * Contest_Size + ((portfolio['salary'] - (60000 - portfolio['Own'])) / 100) - ((60000 - portfolio['salary']) / 100)
|
|
|
336 |
portfolio['Dupes'] = np.where(
|
337 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
338 |
0,
|
339 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
340 |
)
|
341 |
+
|
342 |
elif type_var == 'Classic':
|
343 |
num_players = len([col for col in portfolio.columns if col not in ['salary', 'median', 'Own']])
|
344 |
dup_count_columns = [f'player_{i}_percent_rank' for i in range(1, num_players + 1)]
|
345 |
own_columns = [f'player_{i}_own' for i in range(1, num_players + 1)]
|
346 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'own_ratio', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
347 |
# Get the original player columns (first num_players columns excluding salary, median, Own)
|
348 |
player_columns = [col for col in portfolio.columns[:num_players] if col not in ['salary', 'median', 'Own']]
|
349 |
|
|
|
355 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
356 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
357 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
358 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
359 |
|
360 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (60000 - portfolio['Own'])) / 100) - ((60000 - portfolio['salary']) / 100)
|
361 |
portfolio['dupes_calc'] = portfolio['dupes_calc'] * dupes_multiplier * (portfolio['Own'] / (100 + (Contest_Size / 1000)))
|
|
|
363 |
portfolio['Dupes'] = np.where(
|
364 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
365 |
0,
|
366 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
367 |
)
|
368 |
|
369 |
elif site_var == 'Draftkings':
|
|
|
374 |
else:
|
375 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
|
376 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
|
377 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
378 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
379 |
player_columns = [col for col in portfolio.columns[:6] if col not in ['salary', 'median', 'Own']]
|
380 |
if sport_var == 'GOLF':
|
|
|
430 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
431 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
432 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
433 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
434 |
|
435 |
# Calculate dupes formula
|
436 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 100) - ((50000 - portfolio['salary']) / 100)
|
|
|
440 |
portfolio['Dupes'] = np.where(
|
441 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
442 |
0,
|
443 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
444 |
)
|
445 |
elif type_var == 'Classic':
|
446 |
if sport_var == 'CS2':
|
447 |
dup_count_columns = ['CPT_Own_percent_rank', 'FLEX1_Own_percent_rank', 'FLEX2_Own_percent_rank', 'FLEX3_Own_percent_rank', 'FLEX4_Own_percent_rank', 'FLEX5_Own_percent_rank']
|
448 |
own_columns = ['CPT_Own', 'FLEX1_Own', 'FLEX2_Own', 'FLEX3_Own', 'FLEX4_Own', 'FLEX5_Own']
|
449 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
450 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
451 |
player_columns = [col for col in portfolio.columns[:6] if col not in ['salary', 'median', 'Own']]
|
452 |
|
|
|
478 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
479 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
480 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
481 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
482 |
|
483 |
# Calculate dupes formula
|
484 |
portfolio['dupes_calc'] = ((portfolio['own_product'] * 10) * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 50) - ((50000 - portfolio['salary']) / 50)
|
|
|
488 |
portfolio['Dupes'] = np.where(
|
489 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
490 |
0,
|
491 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
492 |
)
|
493 |
if sport_var == 'LOL':
|
494 |
dup_count_columns = ['CPT_Own_percent_rank', 'TOP_Own_percent_rank', 'JNG_Own_percent_rank', 'MID_Own_percent_rank', 'ADC_Own_percent_rank', 'SUP_Own_percent_rank', 'Team_Own_percent_rank']
|
495 |
own_columns = ['CPT_Own', 'TOP_Own', 'JNG_Own', 'MID_Own', 'ADC_Own', 'SUP_Own', 'Team_Own']
|
496 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
497 |
# Get the original player columns (first 6 columns excluding salary, median, Own)
|
498 |
player_columns = [col for col in portfolio.columns[:7] if col not in ['salary', 'median', 'Own']]
|
499 |
|
|
|
528 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
529 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
530 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
531 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
532 |
|
533 |
# Calculate dupes formula
|
534 |
portfolio['dupes_calc'] = ((portfolio['own_product'] * 10) * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 50) - ((50000 - portfolio['salary']) / 50)
|
|
|
538 |
portfolio['Dupes'] = np.where(
|
539 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
540 |
0,
|
541 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
542 |
)
|
543 |
elif sport_var != 'CS2' and sport_var != 'LOL':
|
544 |
num_players = len([col for col in portfolio.columns if col not in ['salary', 'median', 'Own']])
|
545 |
dup_count_columns = [f'player_{i}_percent_rank' for i in range(1, num_players + 1)]
|
546 |
own_columns = [f'player_{i}_own' for i in range(1, num_players + 1)]
|
547 |
+
calc_columns = ['own_product', 'own_average', 'own_sum', 'avg_own_rank', 'own_rank_percentile', 'dupes_calc', 'low_own_count', 'Ref_Proj', 'Max_Proj', 'Min_Proj', 'Avg_Ref', 'own_ratio']
|
548 |
# Get the original player columns (first num_players columns excluding salary, median, Own)
|
549 |
player_columns = [col for col in portfolio.columns[:num_players] if col not in ['salary', 'median', 'Own']]
|
550 |
|
|
|
556 |
portfolio['own_average'] = (portfolio['Own'].max() * .33) / 100
|
557 |
portfolio['own_sum'] = portfolio[own_columns].sum(axis=1)
|
558 |
portfolio['avg_own_rank'] = portfolio[dup_count_columns].mean(axis=1)
|
559 |
+
portfolio['own_rank_percentile'] = portfolio[dup_count_columns].rank(pct=True)
|
560 |
|
561 |
portfolio['dupes_calc'] = (portfolio['own_product'] * portfolio['avg_own_rank']) * Contest_Size + ((portfolio['salary'] - (50000 - portfolio['Own'])) / 100) - ((50000 - portfolio['salary']) / 100)
|
562 |
portfolio['dupes_calc'] = portfolio['dupes_calc'] * dupes_multiplier * (portfolio['Own'] / (100 + (Contest_Size / 1000)))
|
|
|
564 |
portfolio['Dupes'] = np.where(
|
565 |
np.round(portfolio['dupes_calc'], 0) <= 0,
|
566 |
0,
|
567 |
+
np.round((portfolio['dupes_calc'] * (1 + portfolio['own_rank_percentile'])), 0) - 1
|
568 |
)
|
569 |
|
570 |
portfolio['Dupes'] = np.round(portfolio['Dupes'], 0)
|