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)