【发布时间】:2023-01-11 03:00:51
【问题描述】:
我想连接 streamlit 多选的选择选项。
假设我有以下数据框
| Name | Color |
|---|---|
| A | red |
| A | blue |
| B | black |
| B | blue |
| C | green |
| C | black |
| C | blue |
| D | green |
| D | yellow |
| D | white |
和两个多选过滤器(每列的每个唯一值一个)
我想要以下内容:
- 当最终用户为“名称”列选择一个选项(或多个选项)时,“颜色”的其他多选选项应相应更新,反之亦然。
到目前为止,这是我不成功的尝试。
import streamlit as st
import pandas as pd
df = pd.DataFrame({
'Name': ['A', 'A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D'],
'Color':['red', 'blue', 'blue', 'black', 'black', 'green', 'blue',
'yellow', 'white', 'green', 'purple']
})
tmp = df.copy()
st.title("Connected filters examples")
st.markdown('<br>', unsafe_allow_html=True)
if 'color_class' in st.session_state:
if st.session_state.color_class:
tmp = tmp[tmp['Color'].isin(st.session_state.color_class)]
else:
tmp = df.copy()
name = st.multiselect(
'Choose Name',
tmp['Name'].unique(),
[], key='name_class')
if 'name_class' in st.session_state:
if st.session_state.name_class:
tmp = tmp[tmp['Name'].isin(st.session_state.name_class)]
else:
tmp = df.copy()
color = st.multiselect(
'Choose Color',
tmp['Color'].unique(),
[], key='color_class')
st.dataframe(tmp)
例如,如果最终用户选择颜色“红色”和“绿色”,则名称选项应为“A”、“C”和“D”
【问题讨论】:
-
如果您使用我拥有的代码,您可以通过执行以下操作来解决问题。首先选择颜色蓝色,然后选择名称 A。我希望它只用红色和蓝色更新颜色选择。