构建支持维度下钻的Streamlit合规率透视表应用
实现带维度下钻的合规率Streamlit应用
需求说明
给定如下合规数据表:
docid salesrep customer warehouse saledate deliverydate compliance doc1 abc cus1 wh1 11/1/2024 11/10/2024 0 doc2 abc cus2 wh1 11/4/2024 11/20/2024 1
其中compliance是二元变量(1代表100%合规,0代表0%合规)。需开发Streamlit应用,默认展示仓库级合规率百分比,支持用户通过销售代表、客户维度切换下钻,查看对应层级的合规率,而非展示各层级独立的透视表。
实现代码
import streamlit as st import pandas as pd # 初始化数据(实际场景可替换为文件读取/数据库查询) data = pd.DataFrame({ "docid": ["doc1", "doc2"], "salesrep": ["abc", "abc"], "customer": ["cus1", "cus2"], "warehouse": ["wh1", "wh1"], "saledate": ["11/1/2024", "11/4/2024"], "deliverydate": ["11/10/2024", "11/20/2024"], "compliance": [0, 1] }) # 设置页面标题 st.title("合规率层级下钻分析") # 定义下钻层级选项,默认选中仓库级 drill_levels = ["仓库", "销售代表", "客户"] selected_level = st.selectbox("选择下钻层级", drill_levels, index=0) # 映射层级到数据表字段 level_mapping = { "仓库": "warehouse", "销售代表": "salesrep", "客户": "customer" } group_col = level_mapping[selected_level] # 计算各层级合规率:合规订单数/总订单数 * 100 compliance_rate = data.groupby(group_col).agg( 总订单数=("docid", "count"), 合规订单数=("compliance", "sum") ).reset_index() compliance_rate["合规率(%)"] = round(compliance_rate["合规订单数"] / compliance_rate["总订单数"] * 100, 2) # 展示结果表格 st.subheader(f"{selected_level}级合规率统计") st.dataframe(compliance_rate[[group_col, "总订单数", "合规订单数", "合规率(%)"]], use_container_width=True) # 可选:展示选中层级的明细数据(按需开启) if st.checkbox(f"查看{selected_level}级明细数据"): st.subheader(f"{selected_level}级明细") st.dataframe(data, use_container_width=True)
代码说明
- 数据初始化:这里直接用DataFrame构造测试数据,实际使用时可替换为
pd.read_csv()读取本地文件,或通过数据库连接获取数据。 - 下钻层级选择:用
st.selectbox提供层级切换入口,默认选中仓库级,用户可一键切换到销售代表或客户维度。 - 合规率计算:通过
groupby按选中维度分组,统计总订单数与合规订单数,再计算百分比并保留两位小数,确保数据可读性。 - 结果展示:优先展示汇总统计表格,同时提供明细查看开关,让用户能关联汇总数据与原始订单信息。
内容的提问来源于stack exchange,提问作者msksantosh
相关产品推荐
相关产品推荐

