forked from iansargent/Data-Exploration-Tool-in-Python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstreamlit_rendering.py
More file actions
49 lines (39 loc) · 1.26 KB
/
Copy pathstreamlit_rendering.py
File metadata and controls
49 lines (39 loc) · 1.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import streamlit as st
def filter_dataframe(
dfs,
filter_columns,
key_prefix="filter_dataframe",
header=None,
):
"""
Create cascading selectboxes in two rows to filter a DataFrame.
Args:
dfs (pd.DataFrame): DataFrame to filter, OR a list of frames to filter.
filter_columns (list): Columns to filter on.
Returns:
pd.DataFrame: Filtered DataFrame.
"""
keys = [
f"{key_prefix}_{i}" for i in range(len(filter_columns))
] ## so that we can have multiple layers of filter on same page
dfs = ensure_list(dfs)
df = dfs[0]
selected_values = {}
if header:
st.markdown(header)
cols1 = st.columns(len(filter_columns))
for i, col_name in enumerate(filter_columns):
unique_values = df[col_name].dropna().unique()
selected_value = cols1[i].selectbox(
col_name, options=sorted(unique_values), key=keys[i], index=0
)
selected_values[col_name] = selected_value
dfs = [df[df[col_name] == selected_value] for df in dfs]
df = dfs[0]
return (
(dfs[0], selected_values)
if len(dfs) == 1
else [(df, selected_values) for df in dfs]
)
def ensure_list(x):
return x if isinstance(x, list) else [x]