Отправьте результаты для заполнения кадра данных в потоке

Я хотел бы создать приложение с потоковой подсветкой, в котором пользователь вводит некоторые входные данные, и каждый раз, когда он использует кнопку form_submit_button, он будет заполнять фрейм данных строка за строкой для сбора пользовательских данных. В настоящее время у меня есть следующее приложение:

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

# page

st.sidebar.header("Submit results")

with st.form('Form1'):
        option = st.selectbox(
                "Select the tracked you played:",
                ("ds Mario Kart", "Toad Harbour", "Koopa Cape"))
        number = st.slider("Pick a number", 1, 12)
        submitted1 = st.form_submit_button('Submit 1')

df = pd.DataFrame(np.array([[option, number]]), columns = ["Track", "Result"])
dfs = []
dfs.append(df)
df_combined = pd.concat(dfs)
st.dataframe(df_combined)

Выход:

Как вы можете видеть, он создает раскрывающийся список и ползунок. Они возвращают оба значения. Когда мы меняем значение и нажимаем кнопку отправки, значение в фрейме данных меняется. К сожалению, фрейм данных по-прежнему представляет собой только одну строку. Итак, мне было интересно, как мы можем заполнять фрейм данных строку за строкой каждый раз, когда мы нажимаем кнопку отправки?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я адаптировал ваш код на основе этой документации. По сути, он использует session_state для запоминания данных между потоками, а также обратный вызов onAddRow, связанный с кнопкой отправки:

import pandas as pd
import streamlit as st

st.sidebar.header("Submit results")

if 'data' not in st.session_state:
    st.session_state["data"] = pd.DataFrame(columns=["Track", "Result"])

def onAddRow():
    row = pd.DataFrame({'Track':[st.session_state["option"]], 'Result':[st.session_state["number"]]})
    st.session_state["data"] = pd.concat([st.session_state["data"], row])

with st.form('Form1'):
    st.selectbox("Select track",  ("ds Mario Kart", "Toad Harbour", "Koopa Cape"), key = "option")
    st.slider("Pick a number", 1, 12, key = "number")
    st.form_submit_button('Submit 1', on_click=onAddRow )


st.dataframe(st.session_state["data"])

Спасибо за ваш ответ! Это уже очень здорово. Единственное, с чем я столкнулся, это то, что вам нужно дважды отправить, чтобы изменить значение. Вы понимаете, что я имею в виду?

Quinten 04.06.2024 18:15

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

matleg 05.06.2024 09:57

Другие вопросы по теме