arsentievalex / streamlit-dynamic-filters

Custom component with dynamic multiselect filters for Streamlit
MIT License
68 stars 12 forks source link

Add Groupby Feature to DynamicFiltersWithGroupby Class #14

Open heera-ai opened 2 months ago

heera-ai commented 2 months ago

Description

This issue addresses the need to add a groupby feature to the DynamicFilters class in the streamlit_dynamic_filters package. The enhancement allows users to dynamically filter and group data in a Streamlit application, making it easier to perform aggregations on selected columns.

Proposed Changes

Implementation Details

Example Usage


import streamlit as st
import pandas as pd
from streamlit_dynamic_filters import DynamicFiltersWithGroupby

# Sample data with additional 'population' and 'area' columns for aggregation
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'],
    'population': [8419000, 2930000, 8982000, 5230000,
                   2556000, 1550000, 1569000, 2780000,
                   2254000, 1400000, 1620000, 2340000],
    'area': [783.8, 630.2, 1572, 1687,
             183.4, 500.1, 620, 790,
             108.7, 400, 500, 300],
}

df = pd.DataFrame(data)

dynamic_filters = DynamicFiltersWithGroupby(
    df,
    filters=["region", "country", "city", "district"],
    numerics=["population", "area"],
)

with st.sidebar:
    st.write("Apply filters in any order 👇")

dynamic_filters.display_filters()

dynamic_filters.display_df()