Maintaining Visual State for Sequential Steps (Multiple Button Clicks)

Hello everyone! I am trying to use streamlit to deploy an app that works in sequential steps. Basically the goal is to only show step 1 (upload data), then when they click the button to upload that data, it will then display step 2 (select column). I have this working to display them in order, but I’m missing the ability to hold state with selectbox changes. So in the current code, when I select a new column, it removes step 2 entirely (the select box and confirm button disappear). I know it’s because it’s embedded inside the if statement, I just don’t know how I should structure it.

import streamlit as st
import pandas as pd

def main():
    Upload File
    df = st.file_uploader("Select File")
    if st.button("Confirm File Selection"):
        if df is None:
            st.exception("Please Select a Dataset")

            data = pd.read_csv(df)

            st.subheader("Select a Column")

            target = st.selectbox(
                "Which column?",

            if st.button("Confirm Column"):
                with st.spinner("""
                    # do stuff

if __name__ == "__main__":