I’m not an expert frontend developer, but the dataframes are much more complicated than a simple table. They are dynamic elements which include things like sorting, so they are very difficult, perhaps impossible to edit like that. If you want to tweak the HTML of your tables (understanding that you’d lose the dynamic/sorting capabilities), you can try a static table instead. Pandas also has a .to_html() method and you could use st.markdown(df.to_html(), unsafe_allow_html=True).
I figured out the reason behind this issue but no good idea of how to workaround.
glide-data-grid component on which streamlit dataframes are based is a very complex piece of software which is using canvas2D as a front-layer and the actual table underneath is a kinda template. So users interact with the canvas not the actual table.