首页 > 解决方案 > 如何在python和streamlit中创建依赖下拉列表?

问题描述

根据 这篇文章的答案,我能够在应用所需的过滤器后显示数据框。

我有一个显示多个下拉列表的流线型代码

  1. 第一个下拉列表将列名称作为选项(它的多选选项)
  2. 其他下拉列表将包含所选列的唯一值

在此处输入图像描述

我想要的是,如果用户选择cat3并且cat3没有loc2 ,我希望在第三个下拉列表中根据数据帧的记录仅显示loc1loc3

代码:

import numpy as np
import pandas as pd
import streamlit as st 

df =pd.DataFrame({
            "source_number":
             [11199,11328,11287,32345,12342,1232,13456,123244,13456],
             "location":          
             ["loc2","loc1","loc3","loc1","loc2","loc2","loc3","loc2","loc1"],
              "category": 
             ["cat1","cat2","cat1","cat3","cat3","cat3","cat2","cat3","cat2"],
             })  

is_check = st.checkbox("Display Data")
if is_check:
    st.table(df)


columns = st.sidebar.multiselect("Enter the variables", df.columns)

sidebars = {}
for y in columns:
    ucolumns=list(df[y].unique())
    print (ucolumns)

    sidebars[y]=st.sidebar.multiselect('Filter '+y, ucolumns)   

if bool(sidebars):
    L = [df[k].isin(v) if isinstance(v, list) 
         else df[k].eq(v) 
         for k, v in sidebars.items() if k in df.columns]
    
    df1 = df[np.logical_and.reduce(L)]
    st.table(df1)  

标签: pythonpandasdrop-down-menumulti-select

解决方案


推荐阅读