Как отобразить значения на основе выбора пользователя в фрейме данных pandas

#python #pandas #dataframe #multi-select #streamlit

Вопрос:

Параметры для второго множественного выбора будут изменены в соответствии со значениями в уже существующей структуре данных.

 import pandas as pd
import streamlit as st 
        
df = pd.DataFrame({"A":[4,6,6],
                  "B":[4,6,9],
                  "C":[1,2,3],
                 }) 
interactive = st.beta_container()    
col1, col2 = st.beta_columns(2)
            
with interactive: 
     all_columns_names= df.columns.tolist()
     with col1:
         option1 = st.multiselect("select column to plot",all_columns_names)
     with col2:
         option2 = st.multiselect("select required value/s to 
            plot",list(set(df.loc[(df.iloc[:,0].isin(option1))][df.columns[1]])))
                    
 

пример:

 if   option1 = B
then option2 = [4,6,9]

if option1 = [A,C]
then option2 = [4,6,6,1,2,3]
 

Где ошибка в заявлении в col1 ? Как я могу получить значения option2 , которые связаны с выбранным option1 ?

Комментарии:

1. @KristianCanler так лучше ?

2. Если вы получаете код ошибки, пожалуйста, укажите и это. Кроме того, сейчас код выглядит минимальным/воспроизводимым, но для ясности в вопросе может потребоваться немного больше объяснений.

3. @user5980666 Скажи , если option1 A да, то в чем логика option2 ?

4.@Ynjxsjmh, если опция 1 является опцией 2, должна включать [4,6,6 ]


Ответ №1:

Вы можете получить значения столбцов, выполнив итерацию по каждому столбцу и добавив их в контейнер.

 with interactive:
     with col2:
         vals = set()

         if not isinstance(option1, list):
             option1 = [option1]

         for col in option1:
             vals.update(df[col].values.tolist())

         option2 = st.multiselect("select required value/s to plot", list(vals))