我正在尝试创建一个 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 级别、销售代表级别或客户级别显示一个单独的数据透视表,我希望有一个可以在任何这些维度上向下钻取的表。
我会建议这样的事情:
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()
返回
向下钻取时