limloop's picture
оптимизация
6e00079
raw
history blame
1.59 kB
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)