如何在Streamlit展示的DataFrame/表格中实现动态列选择?
在Streamlit表格内实现内嵌列选择功能
原生的st.dataframe和st.write自带的表格组件没有直接支持内嵌列选择的功能,不过可以借助第三方组件streamlit-aggrid来实现这个需求,它能让你在表格内直接点击列头选择列,并返回选中的列名。
具体实现步骤:
- 先安装依赖包
pip install streamlit-aggrid
- 编写示例代码
import streamlit as st from st_aggrid import AgGrid, GridOptionsBuilder import pandas as pd # 生成测试数据 df = pd.DataFrame({ "姓名": ["张三", "李四", "王五"], "年龄": [25, 30, 28], "城市": ["北京", "上海", "广州"], "薪资": [15000, 20000, 18000] }) # 配置表格选项 gb = GridOptionsBuilder.from_dataframe(df) # 启用列多选模式,也可设为"single"开启单选 gb.configure_selection('multiple', use_checkbox=False, column_selectable="multi") gb.configure_grid_options(domLayout='normal') grid_options = gb.build() # 渲染带列选择功能的表格 grid_response = AgGrid( df, gridOptions=grid_options, enable_enterprise_modules=True, update_mode="MODEL_CHANGED", allow_unsafe_jscode=True ) # 提取选中的列名 selected_columns = [] if grid_response["column_state"]: for col in grid_response["column_state"]: if col["selected"]: selected_columns.append(col["colId"]) # 展示选中结果 st.subheader("选中的列名") st.write(selected_columns)
代码说明:
- 通过
GridOptionsBuilder配置列选择规则,column_selectable="multi"开启列多选,"single"则为单选 - 从
grid_response["column_state"]中读取列的选中状态,筛选出标记为选中的列名 - 点击表格列头即可完成选择,选中结果会实时返回并展示
如果不想依赖第三方组件,也可以用HTML自定义表格结合st.components.v1.html实现,但需要自行编写JS逻辑监听列头点击,复杂度较高,不如streamlit-aggrid便捷。
内容的提问来源于stack exchange,提问作者AP J
相关产品推荐
相关产品推荐

