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

如何在Streamlit中用滑块筛选赛马数据的评分范围?

解决Streamlit中赛马数据的评分范围筛选问题

1. 将单值滑块改为范围滑块

你当前的滑块只能选择单个值,要实现区间筛选,需要把st.slider改成范围模式,通过设置value为元组来返回选中区间的最小值和最大值:

# 范围滑块,返回包含选中区间两端值的元组
rating_range = st.slider("Please select a rating range",
                        min_value=0, max_value=300,
                        value=(0, 300))  # 默认选中全范围
st.write("Selected rating range:", rating_range)

2. 整合范围筛选与现有国家筛选

将评分范围的筛选逻辑和已有的国家筛选结合,有两种常用实现方式:

方式一:使用df.query(和你现有代码风格一致)

直接在查询语句中添加评分范围的条件:

Country = st.sidebar.multiselect(
    "Select a Country",
    options=df["Country"].unique(),
    default=df["Country"].unique()
)

# 范围滑块
rating_range = st.slider("Please select a rating range",
                        min_value=0, max_value=300,
                        value=(0, 300))

# 组合两个筛选条件
filtered_df = df.query(
    "Country == @Country and RDB_Rating >= @rating_range[0] and RDB_Rating <= @rating_range[1]"
)

方式二:使用布尔索引(更直观,适合复杂条件)

通过生成筛选掩码来过滤数据:

Country = st.sidebar.multiselect(
    "Select a Country",
    options=df["Country"].unique(),
    default=df["Country"].unique()
)

rating_range = st.slider("Please select a rating range",
                        min_value=0, max_value=300,
                        value=(0, 300))

# 生成筛选掩码
country_mask = df["Country"].isin(Country)
rating_mask = (df["RDB_Rating"] >= rating_range[0]) & (df["RDB_Rating"] <= rating_range[1])

# 合并掩码得到最终筛选结果
filtered_df = df[country_mask & rating_mask]

3. 展示筛选后的数据

最后可以用Streamlit组件展示筛选结果,比如:

st.dataframe(filtered_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:23:10