Update app.py
Browse files
app.py
CHANGED
@@ -65,6 +65,8 @@ def load_leaderboard_data(csv_file_path):
|
|
65 |
numeric_columns = df.select_dtypes(include=[np.number]).columns
|
66 |
for col in numeric_columns:
|
67 |
df[col] = df[col].apply(lambda x: None if pd.isna(x) else round(x, 3))
|
|
|
|
|
68 |
|
69 |
return df
|
70 |
except Exception as e:
|
@@ -460,9 +462,20 @@ columnDefs = [
|
|
460 |
"wrapHeaderText": True,
|
461 |
"autoHeaderHeight": True
|
462 |
},
|
463 |
-
|
464 |
-
"
|
465 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
466 |
create_numeric_column("W/10 π", width=130, filterParams={
|
467 |
"defaultOption": "greaterThanOrEqual",
|
468 |
"filterOptions": ['equals', 'notEqual', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'inRange']
|
@@ -660,8 +673,8 @@ dashGridOptions = {
|
|
660 |
"suppressCellFocus": True,
|
661 |
"getRowId": "params => params.data.Model_Display",
|
662 |
"pinnedTopRowData": [],
|
663 |
-
"sortingOrder": ['desc', 'asc'],
|
664 |
"suppressMaintainUnsortedOrder": True,
|
|
|
665 |
"rowBuffer": 10,
|
666 |
"maxBlocksInCache": 2,
|
667 |
"onGridReady": {
|
@@ -911,10 +924,10 @@ def debug_callback(value):
|
|
911 |
@app.callback(
|
912 |
[Output('leaderboard-grid', 'rowData'),
|
913 |
Output('model-type-filter', 'value'),
|
914 |
-
Output('pinned-models-store', 'data')],
|
915 |
[Input('model-type-filter', 'value'),
|
916 |
Input('na-model-filter', 'value'),
|
917 |
-
Input('leaderboard-grid', 'pinnedTopRowData')],
|
918 |
prevent_initial_call=False
|
919 |
)
|
920 |
def update_grid(selected_types, show_na, pinned_rows):
|
@@ -926,6 +939,9 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
926 |
|
927 |
filtered_df = df.copy()
|
928 |
|
|
|
|
|
|
|
929 |
# Get pinned model IDs
|
930 |
pinned_models = []
|
931 |
if pinned_rows:
|
@@ -958,7 +974,7 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
958 |
if show_na is None or not show_na:
|
959 |
filtered_df = filtered_df[~has_na]
|
960 |
|
961 |
-
#
|
962 |
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
963 |
|
964 |
records = filtered_df.to_dict('records')
|
@@ -970,12 +986,12 @@ def update_grid(selected_types, show_na, pinned_rows):
|
|
970 |
[Input('additional-columns-filter', 'value')]
|
971 |
)
|
972 |
def update_columns(additional_columns):
|
973 |
-
# Start with base columns up to UGI
|
974 |
current_columns = columnDefs[:7] # Include up to UGI column
|
975 |
|
976 |
# Add UGI category columns if selected
|
977 |
if 'ugi_categories' in additional_columns:
|
978 |
-
current_columns.extend(ugi_category_columns)
|
979 |
|
980 |
# Add remaining base columns (W/10, NatInt, Coding, Political Lean)
|
981 |
current_columns.extend(columnDefs[7:11])
|
|
|
65 |
numeric_columns = df.select_dtypes(include=[np.number]).columns
|
66 |
for col in numeric_columns:
|
67 |
df[col] = df[col].apply(lambda x: None if pd.isna(x) else round(x, 3))
|
68 |
+
|
69 |
+
df = df.sort_values('UGI π', ascending=False)
|
70 |
|
71 |
return df
|
72 |
except Exception as e:
|
|
|
462 |
"wrapHeaderText": True,
|
463 |
"autoHeaderHeight": True
|
464 |
},
|
465 |
+
{
|
466 |
+
"field": "UGI π",
|
467 |
+
"width": 120,
|
468 |
+
"filter": "agNumberColumnFilter",
|
469 |
+
"filterParams": {
|
470 |
+
"defaultOption": "greaterThanOrEqual"
|
471 |
+
},
|
472 |
+
"headerClass": "ag-left-aligned-header wrap-text",
|
473 |
+
"cellClass": "ag-left-aligned-cell",
|
474 |
+
"wrapHeaderText": True,
|
475 |
+
"autoHeaderHeight": True,
|
476 |
+
"suppressSizeToFit": True,
|
477 |
+
"sortingOrder": ['desc', 'asc']
|
478 |
+
},
|
479 |
create_numeric_column("W/10 π", width=130, filterParams={
|
480 |
"defaultOption": "greaterThanOrEqual",
|
481 |
"filterOptions": ['equals', 'notEqual', 'greaterThan', 'greaterThanOrEqual', 'lessThan', 'lessThanOrEqual', 'inRange']
|
|
|
673 |
"suppressCellFocus": True,
|
674 |
"getRowId": "params => params.data.Model_Display",
|
675 |
"pinnedTopRowData": [],
|
|
|
676 |
"suppressMaintainUnsortedOrder": True,
|
677 |
+
"suppressMultiSort": True,
|
678 |
"rowBuffer": 10,
|
679 |
"maxBlocksInCache": 2,
|
680 |
"onGridReady": {
|
|
|
924 |
@app.callback(
|
925 |
[Output('leaderboard-grid', 'rowData'),
|
926 |
Output('model-type-filter', 'value'),
|
927 |
+
Output('pinned-models-store', 'data')],
|
928 |
[Input('model-type-filter', 'value'),
|
929 |
Input('na-model-filter', 'value'),
|
930 |
+
Input('leaderboard-grid', 'pinnedTopRowData')],
|
931 |
prevent_initial_call=False
|
932 |
)
|
933 |
def update_grid(selected_types, show_na, pinned_rows):
|
|
|
939 |
|
940 |
filtered_df = df.copy()
|
941 |
|
942 |
+
# Sort by UGI initially
|
943 |
+
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
944 |
+
|
945 |
# Get pinned model IDs
|
946 |
pinned_models = []
|
947 |
if pinned_rows:
|
|
|
974 |
if show_na is None or not show_na:
|
975 |
filtered_df = filtered_df[~has_na]
|
976 |
|
977 |
+
# Always sort by UGI descending
|
978 |
filtered_df = filtered_df.sort_values('UGI π', ascending=False)
|
979 |
|
980 |
records = filtered_df.to_dict('records')
|
|
|
986 |
[Input('additional-columns-filter', 'value')]
|
987 |
)
|
988 |
def update_columns(additional_columns):
|
989 |
+
# Start with base columns up to UGI column
|
990 |
current_columns = columnDefs[:7] # Include up to UGI column
|
991 |
|
992 |
# Add UGI category columns if selected
|
993 |
if 'ugi_categories' in additional_columns:
|
994 |
+
current_columns.extend(ugi_category_columns) # Use the pre-defined ugi_category_columns
|
995 |
|
996 |
# Add remaining base columns (W/10, NatInt, Coding, Political Lean)
|
997 |
current_columns.extend(columnDefs[7:11])
|