Streamlit обновляет df в интерактивном режимеPython

Программы на Python
Ответить
Anonymous
 Streamlit обновляет df в интерактивном режиме

Сообщение Anonymous »

Я хочу обновить файл df в интерактивном режиме. Пользователь выбирает строку, а затем я хочу, чтобы отображаемый df «исчез», и видимыми должны оставаться только оставшиеся параметры.
В исходной задаче пользователю нужно будет сделать около 30 секций в разных раундах.
Вот минимальный пример

Код: Выделить всё

import streamlit as st
import pandas as pd

# create df
d = {'Num': [1, 2, 3, 4, 5, 6, 7, 8, 9],
'types': ["A", "A", " A", "B", "B", "B", "C", "C", "C"]}
df = pd.DataFrame(data=d)
# add Selection columns
df['selected'] = None

# initialize session state
if 'df' not in st.session_state:
st.session_state.df = df

# all options
all_options = df['types'].unique().tolist()

# run until 3 options are selected
while len(df[df['selected'].notnull()]) < 3:

# load session state
st.session_state.df = df

# make a list of all selected types
selected = df['types'][df['selected'].notnull()].unique().tolist()

# selectable options (list comparisons)
selectable = [x for x in all_options if x not in selected]

# only show selectable
df_select = df[df['types'].isin(selectable)]

# draw the df and save dict output
select_dict = st.dataframe(
df_select,
use_container_width=True,
hide_index=True,
on_select="rerun",
selection_mode="multi-row",
)

# create selected rows
selected_rows = select_dict.selection.rows

# crated filtered df from orignal one
filtered_df = df.iloc[selected_rows]

# merge the two one an indicator
df = pd.merge(df, filtered_df, on=['types', 'Num', 'selected'], how='left', indicator='Double')
# add Selection
df.loc[df['Double'] == "both", "selected"] = True

# delete indicator row
del df['Double']

Теперь каждый раз, когда измененный df отображается под исходным

Подробнее здесь: https://stackoverflow.com/questions/792 ... eractively
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»