gremlin97 commited on
Commit
8b08b97
·
1 Parent(s): 44deb2c

Add metric range filters for each metric type

Browse files
Files changed (1) hide show
  1. app.py +53 -5
app.py CHANGED
@@ -139,7 +139,30 @@ def build_tab(df, name):
139
  elem_classes="filter-group"
140
  )
141
 
142
- def update(search, md, org, cols):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
143
  filtered = pivoted_df.copy()
144
 
145
  if search:
@@ -151,16 +174,33 @@ def build_tab(df, name):
151
  if org:
152
  filtered = filtered[filtered["Organization"].isin(org)]
153
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  if cols:
155
  display_cols = [col for col in cols if col in filtered.columns]
156
  filtered = filtered[display_cols]
157
 
158
  return filtered
159
 
160
- search_bar.change(update, [search_bar, model_filter, org_filter, col_selector], table)
161
- model_filter.change(update, [search_bar, model_filter, org_filter, col_selector], table)
162
- org_filter.change(update, [search_bar, model_filter, org_filter, col_selector], table)
163
- col_selector.change(update, [search_bar, model_filter, org_filter, col_selector], table)
 
 
 
 
164
 
165
 
166
  custom_css = """
@@ -243,6 +283,14 @@ custom_css = """
243
  font-size: 14px;
244
  }
245
 
 
 
 
 
 
 
 
 
246
  .column-select {
247
  margin-bottom: 1.5em;
248
  }
 
139
  elem_classes="filter-group"
140
  )
141
 
142
+ # Add metric filters
143
+ gr.Markdown("**Filter by Metrics**")
144
+ metric_filters = {}
145
+ for metric in metric_cols:
146
+ # Get all numeric values for this metric across all dataset columns
147
+ metric_values = []
148
+ for col in metric_combo_cols:
149
+ if f"({metric})" in col:
150
+ values = pd.to_numeric(pivoted_df[col], errors='coerce').dropna()
151
+ metric_values.extend(values.tolist())
152
+
153
+ if metric_values:
154
+ min_val = min(metric_values)
155
+ max_val = max(metric_values)
156
+ metric_filters[metric] = gr.Slider(
157
+ minimum=min_val,
158
+ maximum=max_val,
159
+ value=min_val,
160
+ step=(max_val - min_val) / 100,
161
+ label=f"Min {metric}",
162
+ elem_classes="metric-filter"
163
+ )
164
+
165
+ def update(search, md, org, cols, *metric_values):
166
  filtered = pivoted_df.copy()
167
 
168
  if search:
 
174
  if org:
175
  filtered = filtered[filtered["Organization"].isin(org)]
176
 
177
+ # Apply metric filters
178
+ metric_names = list(metric_filters.keys())
179
+ for i, metric_name in enumerate(metric_names):
180
+ min_threshold = metric_values[i]
181
+ # Filter rows where at least one column with this metric meets the threshold
182
+ metric_columns = [col for col in metric_combo_cols if f"({metric_name})" in col and col in filtered.columns]
183
+ if metric_columns:
184
+ mask = filtered[metric_columns].apply(
185
+ lambda row: any(pd.to_numeric(val, errors='coerce') >= min_threshold if pd.notna(val) and val != "-" else False for val in row),
186
+ axis=1
187
+ )
188
+ filtered = filtered[mask]
189
+
190
  if cols:
191
  display_cols = [col for col in cols if col in filtered.columns]
192
  filtered = filtered[display_cols]
193
 
194
  return filtered
195
 
196
+ inputs = [search_bar, model_filter, org_filter, col_selector] + list(metric_filters.values())
197
+
198
+ search_bar.change(update, inputs, table)
199
+ model_filter.change(update, inputs, table)
200
+ org_filter.change(update, inputs, table)
201
+ col_selector.change(update, inputs, table)
202
+ for metric_filter in metric_filters.values():
203
+ metric_filter.change(update, inputs, table)
204
 
205
 
206
  custom_css = """
 
283
  font-size: 14px;
284
  }
285
 
286
+ .metric-filter {
287
+ margin-bottom: 1em;
288
+ }
289
+
290
+ .metric-filter label {
291
+ font-size: 14px;
292
+ }
293
+
294
  .column-select {
295
  margin-bottom: 1.5em;
296
  }