You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit交互式仪表盘多列求和实现问题求助

Streamlit交互式仪表盘:筛选后按地区分组年份求和实现方案

直接上可运行的完整代码,对应你需求中的所有功能:

import streamlit as st
import pandas as pd

# 创建示例数据集
data = {
    'Name': ['a', 'b', 'c', 'd'],
    'Region': ['e', 'f', 'e', 'f'],
    2017: [3, 4, 3, 3],
    2018: [3, 5, 6, 7],
    2019: [1, 2, 3, 1]
}
df = pd.DataFrame(data)

# 设置页面标题
st.title('地区-年份数据统计仪表盘')

# 1. 添加交互式筛选组件
## 地区多选框
available_regions = df['Region'].unique().tolist()
selected_regions = st.multiselect('选择地区', available_regions, default=available_regions)

## 年份范围滑块
year_columns = [col for col in df.columns if isinstance(col, int)]
selected_years = st.slider('选择年份范围', min_value=min(year_columns), max_value=max(year_columns), value=(2018, 2019))

# 2. 执行数据筛选
filtered_df = df.query("Region in @selected_regions")
# 整理成只显示选中年份的数据集(和你示例里的输出格式一致)
display_df = filtered_df[['Name', 'Region'] + list(range(selected_years[0], selected_years[1]+1))]
st.subheader('筛选后的数据集')
st.dataframe(display_df)

# 3. 计算求和结果
## 按年份分组求和,用于绘制柱状图
year_sum = filtered_df[list(range(selected_years[0], selected_years[1]+1))].sum().reset_index()
year_sum.columns = ['年份', '求和值']

## 计算选中年份的总求和(对应你例子中的13)
total_sum = year_sum['求和值'].sum()
st.subheader(f'选中年份总求和: {total_sum}')

# 4. 绘制交互式柱状图
st.subheader('各年份求和柱状图')
st.bar_chart(year_sum.set_index('年份'))

关键逻辑拆解

  • 筛选与求和的关联:
    先通过df.query得到符合用户选择地区的filtered_df,这是所有计算的基础。接着根据用户选的年份范围提取对应列,直接对这些列执行sum(),就把筛选结果和求和计算绑定在了一起——筛选条件变了,求和结果会自动更新。

  • 求和结果的两种用法:

    1. 按年份单独求和:整理成带“年份”和“求和值”的DataFrame,直接传给st.bar_chart()就能生成交互式柱状图。
    2. 总求和:把各年份的求和结果再加总,就是你需要的13这类数值,直接展示即可。
  • Streamlit的自动联动:
    不用写额外的事件监听代码,用户调整地区或年份选择时,整个代码会自动重新执行,筛选后的数据集、求和数值、图表都会同步更新,这是Streamlit自带的特性。

内容的提问来源于stack exchange,提问作者yukee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:50:35