Hi @Shawn_Pereira,
a possible solution is in the below snippet (it uses multiple rows selection of AgGrid + streamlit button press to submit deletion request).
Snippet
import string
import numpy as np
import pandas as pd
import streamlit as st
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode
st.set_page_config(layout='wide')
def display_table(df: pd.DataFrame) -> AgGrid:
# Configure AgGrid options
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_selection('multiple', use_checkbox=True)
return AgGrid(
df,
gridOptions=gb.build(),
# this override the default VALUE_CHANGED
update_mode=GridUpdateMode.MODEL_CHANGED
)
# Define dummy data
rng = np.random.default_rng(2021)
N_SAMPLES = 100
N_FEATURES = 10
df = pd.DataFrame(rng.integers(0, N_SAMPLES, size=(
N_SAMPLES, N_FEATURES)), columns=list(string.ascii_uppercase[:N_FEATURES]))
# Display data and selected rows
left, right = st.columns(2)
with left:
st.info("Select rows to be deleted")
response = display_table(df)
with right:
st.warning("Rows selected for deletion")
rows_to_delete = pd.DataFrame(response['selected_rows'])
st.write(rows_to_delete)
# Delete rows on button press
if st.button("Delete rows") and not rows_to_delete.empty:
# Lookup table is needed because AgGrid does not return rows indices
lookup = df.merge(rows_to_delete, on=list(df.columns), how='left', indicator=True)
_df = df.drop(lookup[lookup['_merge'] == 'both'].index)
st.success('Rows deleted')
st.write(_df)