Dynamic multiselect filters for Streamlit
Project description
Dynamic Multi Select Filters for Streamlit
Custom component to create dynamic multiselect filters in Streamlit. The filters apply to a dataframe and adjust their values based on the user selection (similar to Google Sheets slicers or Only Relevant Values in Tableau).
How to install and use the package:
-
Install the package using pip:
pip install streamlit-dynamic-filters
-
Import the
DynamicFilters
class:from streamlit_dynamic_filters import DynamicFilters
-
Create an instance of the
DynamicFilters
class and pass the dataframe and the list of fields that will serve as filters:dynamic_filters = DynamicFilters(df, filters=['col1', 'col2', 'col3', 'col4'])
-
Display the filters in your app:
dynamic_filters.display_filters()
-
Display the filtered dataframe:
dynamic_filters.display_df()
Sample usage with sidebar filters:
import streamlit as st
import pandas as pd
from streamlit_dynamic_filters import DynamicFilters
data = {
'region': ['North America', 'North America', 'Europe', 'Oceania',
'North America', 'North America', 'Europe', 'Oceania',
'North America', 'North America', 'Europe', 'Oceania'],
'country': ['USA', 'Canada', 'UK', 'Australia',
'USA', 'Canada', 'UK', 'Australia',
'USA', 'Canada', 'UK', 'Australia'],
'city': ['New York', 'Toronto', 'London', 'Sydney',
'New York', 'Toronto', 'London', 'Sydney',
'New York', 'Toronto', 'London', 'Sydney'],
'district': ['Manhattan', 'Downtown', 'Westminster', 'CBD',
'Brooklyn', 'Midtown', 'Kensington', 'Circular Quay',
'Queens', 'Uptown', 'Camden', 'Bondi']
}
df = pd.DataFrame(data)
dynamic_filters = DynamicFilters(df, filters=['region', 'country', 'city', 'district'])
with st.sidebar:
st.write("Apply filters in any order 👇")
dynamic_filters.display_filters(location='sidebar')
dynamic_filters.display_df()
Demo GIF:
Sample usage with columns:
import streamlit as st
import pandas as pd
from streamlit_dynamic_filters import DynamicFilters
data = {
'region': ['North America', 'North America', 'Europe', 'Oceania',
'North America', 'North America', 'Europe', 'Oceania',
'North America', 'North America', 'Europe', 'Oceania'],
'country': ['USA', 'Canada', 'UK', 'Australia',
'USA', 'Canada', 'UK', 'Australia',
'USA', 'Canada', 'UK', 'Australia'],
'city': ['New York', 'Toronto', 'London', 'Sydney',
'New York', 'Toronto', 'London', 'Sydney',
'New York', 'Toronto', 'London', 'Sydney'],
'district': ['Manhattan', 'Downtown', 'Westminster', 'CBD',
'Brooklyn', 'Midtown', 'Kensington', 'Circular Quay',
'Queens', 'Uptown', 'Camden', 'Bondi']
}
df = pd.DataFrame(data)
dynamic_filters = DynamicFilters(df, filters=['region', 'country', 'city', 'district'])
st.write("Apply filters in any order 👇")
dynamic_filters.display_filters(location='columns', num_columns=2, gap='large')
dynamic_filters.display_df()
Demo GIF:
0.1.6 - 27th March 2024
Added
- Sorted alphabetically filter labels
0.1.5 - 28th December 2023
Added by kzielins kzislinsk@gmail.com
- Hierarchical filter selectors
- Independent filters with diffrent sessions name
0.1.3 - 28th September 2023
Added
- Ability to specify filter location in display_filters(). The filters can be either displayed in sidebar, main area or columns.
- Error handling of invalid arguments in display_filters().
Changed
- Renamed filter_except() to filter_df(). The function returns a filtered df.
Deprecated
Removed
Fixed
- The StreamlitApiException that occured when selected values did not exist in the dataset.
- Possibility to have more than one filter
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for streamlit_dynamic_filters-0.1.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3d4f53007bf281c846477a2d9f202e61bb97c19c5c43d3dadab75019133c28f2 |
|
MD5 | 751538628306b3b24c42ac1d3d5d3c15 |
|
BLAKE2b-256 | a7e319d0a05c81777a9a5b3655166702b0f6b68005395b927d95c3a7b7ec1041 |
Hashes for streamlit_dynamic_filters-0.1.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 882f213dd3b846704a894c8e31271f0401775334f979a9e4e492a85035179d56 |
|
MD5 | 03034e4f8e2a5fd8cf565e0cd9b4f424 |
|
BLAKE2b-256 | 8219fa3ca994d4e98dc3530ee915a1309ec5f56e9b871ff96118b7f5a6f0684e |