streamlit-dynamic-filters


Namestreamlit-dynamic-filters JSON
Version 0.1.6 PyPI version JSON
download
home_pagehttps://github.com/arsentievalex/streamlit-dynamic-filters
SummaryDynamic multiselect filters for Streamlit
upload_time2024-03-27 21:38:13
maintainerNone
docs_urlNone
authorOleksandr Arsentiev
requires_pythonNone
licenseMIT
keywords streamlit custom component
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Dynamic Multi Select Filters for Streamlit
[![Open Demo App](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://dynamic-filters-demo.streamlit.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).

How to install and use the package:
1. Install the package using [pip](https://pypi.org/project/streamlit-dynamic-filters/):
    ```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:
<img src="https://i.postimg.cc/x1zDwgwh/dynamic-filters-demo-1.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:
<img src="https://i.postimg.cc/gkLTjjg6/dynamic-filters-demo-2.gif"/>   



## 0.1.6 - 27th March 2024
### Added
- Sorted alphabetically filter labels

## 0.1.5 - 28th December 2023
### Added by kzielins <Krzysztof Zielinski> 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 

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/arsentievalex/streamlit-dynamic-filters",
    "name": "streamlit-dynamic-filters",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "streamlit, custom, component",
    "author": "Oleksandr Arsentiev",
    "author_email": "<arsentiev9393@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/a7/e3/19d0a05c81777a9a5b3655166702b0f6b68005395b927d95c3a7b7ec1041/streamlit_dynamic_filters-0.1.6.tar.gz",
    "platform": null,
    "description": "# Dynamic Multi Select Filters for Streamlit\r\n[![Open Demo App](https://static.streamlit.io/badges/streamlit_badge_black_white.svg)](https://dynamic-filters-demo.streamlit.app/)\r\n\r\nCustom component to create dynamic multiselect filters in Streamlit. \r\nThe 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).\r\n\r\nHow to install and use the package:\r\n1. Install the package using [pip](https://pypi.org/project/streamlit-dynamic-filters/):\r\n    ```pip install streamlit-dynamic-filters```\r\n2. Import the `DynamicFilters` class:\r\n    ```from streamlit_dynamic_filters import DynamicFilters```\r\n3. Create an instance of the `DynamicFilters` class and pass the dataframe and the list of fields that will serve as filters:\r\n\r\n    ```dynamic_filters = DynamicFilters(df, filters=['col1', 'col2', 'col3', 'col4'])```\r\n4. Display the filters in your app:\r\n    ```dynamic_filters.display_filters()```\r\n5. Display the filtered dataframe:\r\n    ```dynamic_filters.display_df()```\r\n\r\n\r\n#### Sample usage with sidebar filters:\r\n\r\n```\r\nimport streamlit as st\r\nimport pandas as pd\r\nfrom streamlit_dynamic_filters import DynamicFilters\r\n\r\ndata = {\r\n    'region': ['North America', 'North America', 'Europe', 'Oceania',\r\n               'North America', 'North America', 'Europe', 'Oceania',\r\n               'North America', 'North America', 'Europe', 'Oceania'],\r\n    'country': ['USA', 'Canada', 'UK', 'Australia',\r\n                'USA', 'Canada', 'UK', 'Australia',\r\n                'USA', 'Canada', 'UK', 'Australia'],\r\n    'city': ['New York', 'Toronto', 'London', 'Sydney',\r\n             'New York', 'Toronto', 'London', 'Sydney',\r\n             'New York', 'Toronto', 'London', 'Sydney'],\r\n    'district': ['Manhattan', 'Downtown', 'Westminster', 'CBD',\r\n                 'Brooklyn', 'Midtown', 'Kensington', 'Circular Quay',\r\n                 'Queens', 'Uptown', 'Camden', 'Bondi']\r\n}\r\n\r\ndf = pd.DataFrame(data)\r\n\r\ndynamic_filters = DynamicFilters(df, filters=['region', 'country', 'city', 'district'])\r\n\r\nwith st.sidebar:\r\n    st.write(\"Apply filters in any order \ud83d\udc47\")\r\n\r\ndynamic_filters.display_filters(location='sidebar')\r\n\r\ndynamic_filters.display_df()\r\n```\r\n\r\nDemo GIF:\r\n<img src=\"https://i.postimg.cc/x1zDwgwh/dynamic-filters-demo-1.gif\"/>   \r\n\r\n#### Sample usage with columns:\r\n\r\n```\r\nimport streamlit as st\r\nimport pandas as pd\r\nfrom streamlit_dynamic_filters import DynamicFilters\r\n\r\ndata = {\r\n    'region': ['North America', 'North America', 'Europe', 'Oceania',\r\n               'North America', 'North America', 'Europe', 'Oceania',\r\n               'North America', 'North America', 'Europe', 'Oceania'],\r\n    'country': ['USA', 'Canada', 'UK', 'Australia',\r\n                'USA', 'Canada', 'UK', 'Australia',\r\n                'USA', 'Canada', 'UK', 'Australia'],\r\n    'city': ['New York', 'Toronto', 'London', 'Sydney',\r\n             'New York', 'Toronto', 'London', 'Sydney',\r\n             'New York', 'Toronto', 'London', 'Sydney'],\r\n    'district': ['Manhattan', 'Downtown', 'Westminster', 'CBD',\r\n                 'Brooklyn', 'Midtown', 'Kensington', 'Circular Quay',\r\n                 'Queens', 'Uptown', 'Camden', 'Bondi']\r\n}\r\n\r\ndf = pd.DataFrame(data)\r\n\r\ndynamic_filters = DynamicFilters(df, filters=['region', 'country', 'city', 'district'])\r\n\r\nst.write(\"Apply filters in any order \ud83d\udc47\")\r\n\r\ndynamic_filters.display_filters(location='columns', num_columns=2, gap='large')\r\n\r\ndynamic_filters.display_df()\r\n```\r\n\r\nDemo GIF:\r\n<img src=\"https://i.postimg.cc/gkLTjjg6/dynamic-filters-demo-2.gif\"/>   \r\n\r\n\r\n\r\n## 0.1.6 - 27th March 2024\r\n### Added\r\n- Sorted alphabetically filter labels\r\n\r\n## 0.1.5 - 28th December 2023\r\n### Added by kzielins <Krzysztof Zielinski> kzislinsk@gmail.com\r\n- Hierarchical filter selectors\r\n- Independent filters with diffrent sessions name\r\n\r\n## 0.1.3 - 28th September 2023\r\n### Added\r\n- Ability to specify filter location in display_filters(). The filters can be either displayed in sidebar, main area or columns.\r\n- Error handling of invalid arguments in display_filters().\r\n\r\n### Changed\r\n- Renamed filter_except() to filter_df(). The function returns a filtered df.\r\n\r\n### Deprecated\r\n- \r\n\r\n### Removed\r\n- \r\n\r\n### Fixed\r\n- The StreamlitApiException that occured when selected values did not exist in the dataset.\r\n- Possibility to have more than one filter \r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Dynamic multiselect filters for Streamlit",
    "version": "0.1.6",
    "project_urls": {
        "Homepage": "https://github.com/arsentievalex/streamlit-dynamic-filters"
    },
    "split_keywords": [
        "streamlit",
        " custom",
        " component"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8219fa3ca994d4e98dc3530ee915a1309ec5f56e9b871ff96118b7f5a6f0684e",
                "md5": "03034e4f8e2a5fd8cf565e0cd9b4f424",
                "sha256": "882f213dd3b846704a894c8e31271f0401775334f979a9e4e492a85035179d56"
            },
            "downloads": -1,
            "filename": "streamlit_dynamic_filters-0.1.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "03034e4f8e2a5fd8cf565e0cd9b4f424",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 5657,
            "upload_time": "2024-03-27T21:38:11",
            "upload_time_iso_8601": "2024-03-27T21:38:11.379768Z",
            "url": "https://files.pythonhosted.org/packages/82/19/fa3ca994d4e98dc3530ee915a1309ec5f56e9b871ff96118b7f5a6f0684e/streamlit_dynamic_filters-0.1.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a7e319d0a05c81777a9a5b3655166702b0f6b68005395b927d95c3a7b7ec1041",
                "md5": "751538628306b3b24c42ac1d3d5d3c15",
                "sha256": "3d4f53007bf281c846477a2d9f202e61bb97c19c5c43d3dadab75019133c28f2"
            },
            "downloads": -1,
            "filename": "streamlit_dynamic_filters-0.1.6.tar.gz",
            "has_sig": false,
            "md5_digest": "751538628306b3b24c42ac1d3d5d3c15",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 6390,
            "upload_time": "2024-03-27T21:38:13",
            "upload_time_iso_8601": "2024-03-27T21:38:13.039634Z",
            "url": "https://files.pythonhosted.org/packages/a7/e3/19d0a05c81777a9a5b3655166702b0f6b68005395b927d95c3a7b7ec1041/streamlit_dynamic_filters-0.1.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-27 21:38:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "arsentievalex",
    "github_project": "streamlit-dynamic-filters",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "streamlit-dynamic-filters"
}
        
Elapsed time: 0.21097s