vwxyzjn commited on
Commit
ab41a5c
·
verified ·
1 Parent(s): 0236a22

Support filtering by search strings and columns at the same time. (#4)

Browse files

- Support filtering by search strings and columns at the same time. (df10b19d6e4187b27cde2efc16e5e888fd4ba543)

Files changed (1) hide show
  1. app.py +12 -16
app.py CHANGED
@@ -146,27 +146,23 @@ def refresh(agg: str = "max"):
146
 
147
 
148
  # Function to update the table based on search query
149
- def update_table(search_query):
150
  df = leaderboard_df
151
- if search_query:
152
  search_terms = search_query.split(";")
153
  search_terms = [term.strip().lower() for term in search_terms]
154
  pattern = "|".join(search_terms)
155
  df = df[df["Model"].str.lower().str.contains(pattern, regex=True)]
156
  # Drop any columns which are all NaN
157
  df = df.dropna(how="all", axis=1)
158
- return df
159
-
160
-
161
- def filter_columns(cols):
162
- index_cols = list(leaderboard_df.columns[:1])
163
- new_cols = index_cols + cols
164
- df = leaderboard_df
165
- df = df.copy()[new_cols]
166
- # Drop rows with NaN values
167
- df = df.copy().dropna(how="all", axis=0, subset=[c for c in df.columns if c in cols])
168
- # Recompute average
169
- df.insert(loc=1, column="Average", value=df.mean(axis=1, numeric_only=True))
170
  return df
171
 
172
 
@@ -201,9 +197,9 @@ with demo:
201
  with gr.Row():
202
  refresh_button = gr.Button("Refresh")
203
 
204
- cols_bar.change(filter_columns, inputs=[cols_bar], outputs=[leaderboard_table])
205
  agg.change(refresh, inputs=[agg], outputs=[leaderboard_table])
206
- search_bar.submit(update_table, inputs=[search_bar], outputs=[leaderboard_table])
207
  refresh_button.click(refresh, inputs=[], outputs=[leaderboard_table])
208
 
209
  demo.launch()
 
146
 
147
 
148
  # Function to update the table based on search query
149
+ def filter_and_search(cols: list[str], search_query: str):
150
  df = leaderboard_df
151
+ if len(search_query) > 0:
152
  search_terms = search_query.split(";")
153
  search_terms = [term.strip().lower() for term in search_terms]
154
  pattern = "|".join(search_terms)
155
  df = df[df["Model"].str.lower().str.contains(pattern, regex=True)]
156
  # Drop any columns which are all NaN
157
  df = df.dropna(how="all", axis=1)
158
+ if len(cols) > 0:
159
+ index_cols = list(leaderboard_df.columns[:1])
160
+ new_cols = index_cols + cols
161
+ df = df.copy()[new_cols]
162
+ # Drop rows with NaN values
163
+ df = df.copy().dropna(how="all", axis=0, subset=[c for c in df.columns if c in cols])
164
+ # Recompute average
165
+ df.insert(loc=1, column="Average", value=df.mean(axis=1, numeric_only=True))
 
 
 
 
166
  return df
167
 
168
 
 
197
  with gr.Row():
198
  refresh_button = gr.Button("Refresh")
199
 
200
+ cols_bar.change(filter_and_search, inputs=[cols_bar, search_bar], outputs=[leaderboard_table])
201
  agg.change(refresh, inputs=[agg], outputs=[leaderboard_table])
202
+ search_bar.submit(filter_and_search, inputs=[cols_bar, search_bar], outputs=[leaderboard_table])
203
  refresh_button.click(refresh, inputs=[], outputs=[leaderboard_table])
204
 
205
  demo.launch()