Skip to main content

Dynamic multiselect filters for Streamlit

Project description

Dynamic Multi Select Filters for Streamlit

Open Demo App

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).

Basic documentation is available at https://arsentievalex.github.io/streamlit-dynamic-filters/

How to install and use the package:

  1. Install the package using pip: pip install streamlit-dynamic-filters

  2. Import the DynamicFilters class: from streamlit_dynamic_filters import DynamicFilters

  3. 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'])

  4. Display the filters in your app: dynamic_filters.display_filters()

  5. 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.9 - 2nd August 2024

Added

  • Key for each elements in filters, so that multiple DynamicFilters can be used in one app (contribution by @vikashgraja)
  • reset_filters function (contribution by @ragchuck)

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.

Fixed

  • The StreamlitApiException that occured when selected values did not exist in the dataset.
  • Possibility to have more than one filter

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

streamlit_dynamic_filters-0.1.9.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file streamlit_dynamic_filters-0.1.9.tar.gz.

File metadata

File hashes

Hashes for streamlit_dynamic_filters-0.1.9.tar.gz
Algorithm Hash digest
SHA256 ef65029ec249a3681390711b88fcad339bb3a4ce1e13857443d4553592e23cba
MD5 144110c9ab47a982a88b0ff226ce7130
BLAKE2b-256 a830f925349c2ba434b3c271811cbf4a4589828e34af69c0a132738650f98cdc

See more details on using hashes here.

File details

Details for the file streamlit_dynamic_filters-0.1.9-py3-none-any.whl.

File metadata

File hashes

Hashes for streamlit_dynamic_filters-0.1.9-py3-none-any.whl
Algorithm Hash digest
SHA256 0b2d6db612f35bf10e18f19de137c65b051d38ed000a6e3bfe973370b142b42d
MD5 bd74886fd9c27a53b15c11b77be59c0a
BLAKE2b-256 4381bce6dd65a9abb74e5319d3da4604e735791b6044b16744164bcd9a8a9f04

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page