user input start time and end time and date range. create a mask for the time range for each date in the user input date range. then create a button that allows this mask to be added to a list of filters that will be used to filter out a timeseries csv
To upload files, please first save the app
import streamlit as st
import datetime
import pandas as pd
# Initialize session state for filters
if "filters" not in st.session_state:
st.session_state.filters = []
st.title("Time Range Filter Creator")
# Date range selection
date_range = st.date_input(
"Select date range",
value=(datetime.date.today(), datetime.date.today()),
min_value=datetime.date(2000, 1, 1),
max_value=datetime.date(2050, 12, 31)
)
# Time range selection
col1, col2 = st.columns(2)
with col1:
start_time = st.time_input("Start time", datetime.time(9, 0))
with col2:
end_time = st.time_input("End time", datetime.time(17, 0))
if st.button("Add Filter"):
# Create a filter dictionary
new_filter = {
"start_date": date_range[0],
"end_date": date_range[1],
"start_time": start_time,
"end_time": end_time
}
st.session_state.filters.append(new_filter)
st.success("Filter added successfully!")
# Display current filters
if st.session_state.filters:
st.subheader("Current Filters")
for idx, filter in enumerate(st.session_state.filters):
st.write(f"Filter {idx + 1}:")
st.write(f"Date Range: {filter['start_date']} to {filter['end_date']}")
st.write(f"Time Range: {filter['start_time']} to {filter['end_time']}")
if st.button("Clear All Filters"):
st.session_state.filters = []
st.success("All filters cleared!")
# Example of how to apply these filters to a timeseries DataFrame
st.subheader("Example Usage")
st.code("""
# Example of how to apply the filters to your timeseries data:
def apply_filters(df, filters):
mask = pd.Series(False, index=df.index)
for filter in filters:
date_mask = (df.index.date >= filter['start_date']) & \
(df.index.date <= filter['end_date'])
time_mask = (df.index.time >= filter['start_time']) & \
(df.index.time <= filter['end_time'])
mask = mask | (date_mask & time_mask)
return df[mask]
""")
Hi! I can help you with any questions about Streamlit and Python. What would you like to know?