python - 如何在python和streamlit中创建依赖下拉列表?
问题描述
根据 这篇文章的答案,我能够在应用所需的过滤器后显示数据框。
我有一个显示多个下拉列表的流线型代码
- 第一个下拉列表将列名称作为选项(它的多选选项)
- 其他下拉列表将包含所选列的唯一值
我想要的是,如果用户选择cat3并且cat3没有loc2 ,我希望在第三个下拉列表中根据数据帧的记录仅显示loc1和loc3。
代码:
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)
解决方案
推荐阅读
- maven - 无法为 Maven 项目创建 jar 文件
- python - python -m 标志的含义
- recover - 恢复授权 2fa 令牌
- sql - 找出是什么使 DBCC CHECKDB 使数据库脱机
- django - Django:时间阈值
- bash - 用于递归迭代文件并使用正则表达式匹配的 Bash 脚本
- vb.net - 将多个过滤器描述符添加到 RadGridView - OR 语句 VB
- javascript - CSS使父div不适合子大小
- r - 创建一个for循环来对R上的数据进行子集化
- excel - 在 Google 表格中使用 SUMIFS 或 FILTER 对文本和日期条件进行求和