Help with creating a simple permalink

I figured it out! Here’s the code section that did it:

def main():
# Load the data
df = load_data()

# Create a mapping of Utility Number to a single Utility Name
utility_name_mapping = df.groupby('Utility Number')['Utility Name'].first()

# Set the title of the application
st.title('📈 WattArchive')

# Simple explainer
st.caption('Query and compare average electricity costs over time by utility, service type, and customer class.')

st.header('Query')
tab1, tab2 = st.tabs(["Utilities", "Data Types"])

# Get current query parameters
query_params = st.experimental_get_query_params()

with tab1: 
    # Allow user to filter by state and ownership before selecting utility
    states = st.multiselect("Filter by states", sorted(df['State'].unique()))
    ownership_types = st.multiselect("Filter by ownership types", df['Ownership'].unique())

    # Filter the DataFrame based on the selected states and ownership types
    df_filtered = df.copy()
    if states:
        df_filtered = df_filtered[df_filtered['State'].isin(states)]
    if ownership_types:
        df_filtered = df_filtered[df_filtered['Ownership'].isin(ownership_types)]

    # Allow user to select utilities from the filtered data
    if 'utilities' in query_params:
        utilities = query_params['utilities']
    else:
        utilities = st.multiselect("Select utilities", df_filtered['Utility Name'].unique())

with tab2:      
    # Allow user to select service types
    service_types = df_filtered['Service Type'].unique()
    selected_service_types = query_params['service_types'] if 'service_types' in query_params else st.multiselect("Service Types", service_types)

    # Allow user to select rate types
    rate_types = ['Residential Rate', 'Commercial Rate', 'Industrial Rate']
    selected_rates = query_params['rate_types'] if 'rate_types' in query_params else st.multiselect("Rate types", rate_types)

    # Year range selection
    if not df_filtered.empty:
        min_year = int(df_filtered["Data Year"].min())
        max_year = int(df_filtered["Data Year"].max())
        if 'start_year' in query_params and 'end_year' in query_params:
            year_range = (int(query_params['start_year'][0]), int(query_params['end_year'][0]))
        else:
            year_range = st.slider("Year Range", min_year, max_year, (min_year, max_year))
        start_year, end_year = year_range
        df_filtered = df_filtered[(df_filtered['Data Year'] >= start_year) & (df_filtered['Data Year'] <= end_year)]


if utilities and selected_rates and selected_service_types:    
       
    # Create share permalink
    data = {
        'utilities': utilities,
        'service_types': selected_service_types,
        'rate_types': selected_rates,
        'start_year': year_range[0],
        'end_year': year_range[1],
    }
    query_string = urllib.parse.urlencode(data, doseq=True)
    url = f'https://wattarchive.streamlit.app/?run=1&{query_string}&autoupdate=true'
    st.markdown(f'[🔗 Share these rates]({url})', unsafe_allow_html=True)
1 Like