File size: 1,591 Bytes
6e00079 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import streamlit as st
@st.cache_data
def get_search_mask(df, search_query):
return (
df["world"].str.contains(search_query, case=False, na=False) |
df["name"].str.contains(search_query, case=False, na=False) |
df["short_story"].str.contains(search_query, case=False, na=False) |
df["description"].str.contains(search_query, case=False, na=False) |
df["style"].str.contains(search_query, case=False, na=False) |
df["first_message"].str.contains(search_query, case=False, na=False)
)
@st.cache_data
def apply_filters(df, search_query, absurdity_range, selected_mood, selected_tags, sort_option):
"""Применение фильтров и сортировки"""
filtered_df = df[
(df["absurdity"] >= absurdity_range[0]) &
(df["absurdity"] <= absurdity_range[1])
]
if selected_mood != "Все":
filtered_df = filtered_df[filtered_df["mood"] == selected_mood]
if selected_tags:
filtered_df = filtered_df[filtered_df["tags"].str.contains("|".join(selected_tags))]
if search_query:
mask = get_search_mask(df, search_query)
filtered_df = filtered_df[mask]
# Сортировка
sort_columns = {
"По имени (А→Я)": ("name", True),
"По имени (Я→А)": ("name", False),
"По абсурдности (↑)": ("absurdity", True),
"По абсурдности (↓)": ("absurdity", False)
}
col, asc = sort_columns[sort_option]
return filtered_df.sort_values(col, ascending=asc) |