如何在Streamlit指标UI中计算并展示百分比列的总和/平均值
问题与解决方案:Streamlit中展示Pandas百分比数据的总计/平均值
问题描述
我有一个包含百分比列的Pandas DataFrame,想要在Streamlit的Metrics组件中展示这些百分比的总和或平均值。我尝试了以下代码,但输出不符合预期:
# 计算顶部分析数据 total_investment = df['Investment'] total1,total2,total3,total4,total5=st.columns(5,gap='small') with total1: st.info('Sum Investment',icon="💰") st.metric(label="Sum TZS",value=f"{total_investment}")
运行后得到的结果是直接输出了整个Investment列的数据,而非计算后的总和或平均值。
解决方案
要正确计算并展示百分比数据的总计或平均值,按以下步骤操作:
1. 确保数据类型正确
如果Investment列是带百分号的字符串格式,先转换为数值类型:
# 处理带%的字符串列,转换为小数形式的数值 df['Investment'] = df['Investment'].str.replace('%', '').astype(float) / 100
2. 计算总和或平均值
使用Pandas的聚合函数完成计算:
- 计算百分比总和:
total_investment = df['Investment'].sum()
- 计算百分比平均值:
avg_investment = df['Investment'].mean()
3. 在Streamlit中格式化展示
将计算结果格式化为易读的百分比形式,再传入Metrics组件:
# 计算总和并格式化显示 total_investment = df['Investment'].sum() formatted_total = f"{total_investment * 100:.2f}%" total1,total2,total3,total4,total5=st.columns(5,gap='small') with total1: st.info('投资占比总和',icon="💰") st.metric(label="总和", value=formatted_total) # 计算平均值并格式化显示 avg_investment = df['Investment'].mean() formatted_avg = f"{avg_investment * 100:.2f}%" with total2: st.info('投资占比平均值',icon="📊") st.metric(label="平均值", value=formatted_avg)
内容的提问来源于stack exchange,提问作者Ravi 1001
相关产品推荐
相关产品推荐

