创建一个 Streamlit 应用程序以将数据透视表显示为向下钻取

问题描述 投票:0回答:1

我正在尝试创建一个 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

合规性是二进制变量 - 1 或 0(100% 或 0%)

我正在尝试创建一个精简的应用程序,该应用程序以百分比形式显示仓库级别的合规性,用户可以在每个销售代表或客户级别向下钻取,以查看向下钻取级别的合规性百分比

我可以在 wh 级别、销售代表级别或客户级别显示一个单独的数据透视表,我希望有一个可以在任何这些维度上向下钻取的表。

python-3.x plotly plotly-dash streamlit
1个回答
0
投票

我会建议这样的事情:

import pandas as pd
import plotly.express as px

data = {
    'docid': ['doc1', 'doc2', 'doc3', 'doc4'],
    'salesrep': ['abc', 'abc', 'xyz', 'xyz'],
    'customer': ['cus1', 'cus2', 'cus3', 'cus4'],
    'warehouse': ['wh1', 'wh1', 'wh2', 'wh2'],
    'saledate': ['11/1/2024', '11/4/2024', '11/5/2024', '11/7/2024'],
    'deliverydate': ['11/10/2024', '11/20/2024', '11/12/2024', '11/18/2024'],
    'compliance': [0, 1, 1, 0]
}

df = pd.DataFrame(data)

def compute_compliance_counts(df, group_by):
    grouped = df.groupby(group_by).agg(
        total_docs=('compliance', 'count'),
        compliant_docs=('compliance', 'sum')
    ).reset_index()
    grouped['compliance_percentage'] = (grouped['compliant_docs'] / grouped['total_docs'] * 100).round(2)
    return grouped

customer_compliance = compute_compliance_counts(df, ['warehouse', 'salesrep', 'customer'])

fig = px.sunburst(
    data_frame=customer_compliance,
    path=['warehouse', 'salesrep', 'customer'],
    values='total_docs',  
    color='compliance_percentage',
    color_continuous_scale='Viridis', 
    hover_data={'compliance_percentage': True},
    title="Compliance Drill-Down"
)

fig.update_traces(textinfo='label+percent entry')

fig.show()

返回

when started

向下钻取时

When drilled down

© www.soinside.com 2019 - 2024. All rights reserved.