如何在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
相关产品推荐
相关产品推荐

