I have a column like this YYYY-MM-DD
in a data frame (look image below).
Here is how .csv
file looks like:
Data de la classe,Genere,ID,Durada,Preu
2022-09-07,H,RQWLPVCJ,1h 30min,21.00
(Some numbers/letters appear in orange. That is caused due to code sample)
I want to add a filter that shows only the rows depending on the month the user decided to filter by.
For e.g.: The user selected October as a filter. Then, he will only see rows with a MM
equal to 10 (considering January is equal to 1).
Here is what the filter looks like and the new data frame created based on the filter, as I first tried:
month = st.sidebar.selectbox(
"Selecciona el mes",
('Gener', 'Febrer', 'Març',
'Abril', 'Maig', 'Juny',
'Juliol', 'Agost', 'Setembre',
'Octubre', 'Novembre', 'Decembre')
)
dfSelection = df.query(
"Data de la classe == @month"
)
#Show data frame with filters applied
st.table(dfSelection)
I have no idea how I can access the MM position and then filter it.
Any ideas on that?
Here is one approach with code comments.
import streamlit as st
import pandas as pd
# months for selectbox options.
MONTHS = ('Gener', 'Febrer', 'Març',
'Abril', 'Maig', 'Juny',
'Juliol', 'Agost', 'Setembre',
'Octubre', 'Novembre', 'Decembre')
# Create a sample dict for dataframe
data = {
'Data de la classe': ['2022-09-27', '2022-09-28',
'2022-09-29', '2022-10-03',
'2022-10-04']
}
# Build df.
df = pd.DataFrame(data)
st.dataframe(df)
# Convert date string to datetime and put it in DateTime column.
df['DateTime'] = pd.to_datetime(df['Data de la classe'])
# Create MonthNumber column based from DateTime column.
df["MonthNumber"] = df["DateTime"].dt.month
st.dataframe(df)
# Add streamlit selectbox.
sel_month = st.sidebar.selectbox(label="Selecciona el mes", options=MONTHS)
# Get the month index based from selected month.
# We add 1 since index starts at 0 but our january starts at 1.
month_index = MONTHS.index(sel_month) + 1
# Execute query.
st.write('#### Query result')
dfSelection = df.query(
"MonthNumber == @month_index"
)
# Show data frame with filters applied.
st.table(dfSelection)
# Show only the Data de la classe column.
dfSelection_classe = dfSelection[['Data de la classe']]
st.table(dfSelection_classe)
Read csv file with pandas, converting it to dataframe with pd.read_csv()
import streamlit as st
import pandas as pd
# months for selectbox options.
MONTHS = ('Gener', 'Febrer', 'Març',
'Abril', 'Maig', 'Juny',
'Juliol', 'Agost', 'Setembre',
'Octubre', 'Novembre', 'Decembre')
# Create a sample dict for dataframe
# data = {
# 'Data de la classe': ['2022-09-27', '2022-09-28',
# '2022-09-29', '2022-10-03',
# '2022-10-04']
# }
# Build df.
# df = pd.DataFrame(data)
df = pd.read_csv('s.csv')
st.dataframe(df)
# Convert date string to datetime and put it in DateTime column.
df['DateTime'] = pd.to_datetime(df['Data de la classe'])
# Create MonthNumber column based from DateTime column.
df["MonthNumber"] = df["DateTime"].dt.month
st.dataframe(df)
# Add streamlit selectbox.
sel_month = st.sidebar.selectbox(label="Selecciona el mes", options=MONTHS)
# Get the month index based from selected month.
# We add 1 since index starts at 0 but our january starts at 1.
month_index = MONTHS.index(sel_month) + 1
# Execute query.
st.write('#### Query result')
dfSelection = df.query(
"MonthNumber == @month_index"
)
# Show data frame with filters applied.
st.table(dfSelection)
# Show only the Data de la classe column.
dfSelection_classe = dfSelection[['Data de la classe']]
st.table(dfSelection_classe)
Data de la classe,others
2022-09-27,a
2022-09-28,ss
2022-09-28,25
2022-10-03,85
2022-10-04,548