首页 > 解决方案 > 如何使流线型下拉菜单具有交互性?

问题描述

我有一个数据框如下:

    sender                  date         keyword        value
0   zdf                     2021-05-19   motor          2.0
1   bund_der                2021-07-13   motor          4.0
2   bund_der                2021-07-16   stator         5.0
3   infos                   2021-07-25   stator         2.0
4   infos                   2021-07-29   motor          1.0

我正在尝试使用streamlit制作仪表板。会有两个下拉菜单;一个从“发件人”列中选择另一个用于“关键字”列。输出将是一个折线图,其中日期位于 x 轴,值位于 y 轴。

我使用了以下代码:

import streamlit as st
import pandas as pd 
import matplotlib.pyplot as plt
from datetime import datetime


df = pd.read_csv('all_data_streamlit.csv')


def plot_count_keyword(df):       
    kw_count_sender_selectbox = [st.sidebar.selectbox(
        "Senders", df["sender"].unique())] # Dropdown box to select sender
    kw_count_keyword_selectbox = [st.sidebar.selectbox(
        "Keywords", df["Keywords"].unique())] # Dropdown box to select the keyword

    
    df_kw_count_selected_sender = df[df['sender'].isin(kw_count_sender_selectbox)]
    df_kw_count_selected_keyword = df_kw_count_selected_sender[df_kw_count_selected_sender['keyword'].isin(kw_count_keyword_selectbox)] 

    df_kw_count_selected_keyword.groupby(['mail_date']).sum().plot()
    plt.show()    
    st.pyplot(fig=plt)
plot_count_keyword(df)

问题是,它只显示每个选择框的第一个元素的输出。我“想”,在选择框中选择不同的元素将重新计算一切并更新情节。

我认为,这里没有这样做。它只是固定在第一个情节上。更改选择框选择时有什么触发计算的吗?或者,我是否必须为每种情况澄清代码中的输出(例如,如果 kw_count_sender_selectbox == 'infos': 然后执行此操作)?

标签: pythonpandasstreamlit

解决方案


推荐阅读