You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python与Streamlit为12列批量添加带多选框表格的展开器

批量实现Streamlit 12列展开器布局

需求:实现12列布局,每列包含一个st.expander展开器,每个展开器内有带表格的st.multiselect多选组件。目前已手动添加部分列逻辑,需要将display_month_list函数批量添加到每一列中。

用户原代码:

def display_month_list(df,month):
      df_test = df.iloc[:,[0,1,2,3]]
      option_list = df_test["categories"].unique().tolist()
     
      selected_option = st.multiselect("Select Category",option_list)
      if selected_option:
            df_test = df_test[df_test["categories"].isin(selected_option)]
      st.write(df_test)

col1,col2,col3,col4 = st.columns(4)
col5,col6,col7,col8 = st.columns(4)
col9,col10,col11,col12 = st.columns(4)

with col1:
   with st.expander("cat1"):
        display_month_list(df,"cat1")

with col2:
   with st.expander("cat2"):
        display_month_list(df,"cat2")

批量实现方案

通过循环遍历列列表批量生成内容,替代手动逐个编写的冗余代码,实现更简洁的逻辑:

优化后的完整代码:

import streamlit as st
import pandas as pd

def display_month_list(df, month_label):
    # 原函数中month参数未实际使用,重命名为month_label增强可读性
    df_test = df.iloc[:, [0,1,2,3]]
    option_list = df_test["categories"].unique().tolist()
    
    # 多选框标题加入标签,方便区分不同列
    selected_option = st.multiselect(f"Select Category ({month_label})", option_list)
    if selected_option:
        df_test = df_test[df_test["categories"].isin(selected_option)]
    st.write(df_test)

# 一次性创建12列对象的列表
cols = st.columns(12)

# 循环遍历每一列,自动生成对应内容
for idx, col in enumerate(cols, start=1):
    cat_label = f"cat{idx}"
    with col:
        with st.expander(cat_label):
            display_month_list(df, cat_label)

关键说明

  • 用st.columns(12)直接生成12个列对象,避免分三组创建的冗余代码
  • 通过enumerate循环同时获取列的索引(从1开始)和列对象,自动生成cat1到cat12的标签
  • 调整多选框标题加入列标签,方便用户区分不同列的操作区域(可根据实际需求修改)

内容的提问来源于stack exchange,提问作者DevLeb2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:48:21