zhaorui-nb commited on
Commit
4a14d79
โ€ข
1 Parent(s): f9d3528

fix filter serach bug

Browse files
Files changed (1) hide show
  1. utils/filterable_dataframe.py +21 -7
utils/filterable_dataframe.py CHANGED
@@ -2,7 +2,6 @@ import streamlit as st
2
 
3
 
4
 
5
-
6
  def filterable_dataframe(df):
7
  # ๅคš้ธๆก†้ธๆ“‡้œ€่ฆ็ฏฉ้ธ็š„ๅˆ—
8
  selected_columns = st.multiselect('Select columns to filter', options=df.columns)
@@ -14,12 +13,27 @@ def filterable_dataframe(df):
14
  with st.expander(f'Filter by {column}', expanded=True):
15
  if df[column].dtype == 'object':
16
  unique_values = df[column].unique()
17
- selected_values = st.multiselect(f'Select values for {column}', options=list(unique_values))
18
- search_text = st.text_input(f'Search in {column}')
19
- if search_text:
20
- selected_values = [value for value in selected_values if search_text.lower() in value.lower()]
21
- if selected_values:
22
- filters[column] = selected_values
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  else:
24
  min_value, max_value = df[column].min(), df[column].max()
25
  selected_range = st.slider(f'Select range for {column}', min_value, max_value, (min_value, max_value))
 
2
 
3
 
4
 
 
5
  def filterable_dataframe(df):
6
  # ๅคš้ธๆก†้ธๆ“‡้œ€่ฆ็ฏฉ้ธ็š„ๅˆ—
7
  selected_columns = st.multiselect('Select columns to filter', options=df.columns)
 
13
  with st.expander(f'Filter by {column}', expanded=True):
14
  if df[column].dtype == 'object':
15
  unique_values = df[column].unique()
16
+ multiselect_value = st.multiselect(f'Select values for {column}', options=list(unique_values))
17
+ re_pattern = st.text_input(f'Search re pattern {column}')
18
+
19
+ final_selected_values = []
20
+ if multiselect_value:
21
+ final_selected_values.extend(multiselect_value)
22
+
23
+
24
+ if re_pattern:
25
+ re_pattern = re.compile(re_pattern)
26
+ match_value = [value for value in unique_values if re_pattern.search(value)]
27
+ if match_value:
28
+ final_selected_values.extend(match_value)
29
+ # st.write('Match value:', match_value)
30
+ else:
31
+ st.write('No match value')
32
+ final_selected_values.append('')
33
+
34
+ if final_selected_values:
35
+ filters[column] = final_selected_values
36
+
37
  else:
38
  min_value, max_value = df[column].min(), df[column].max()
39
  selected_range = st.slider(f'Select range for {column}', min_value, max_value, (min_value, max_value))