Sort a Column of an interactive Dataframe and send n first sorted rows of an other Column to a list back in python ide to do something with it

Say that the interactive data frame has columns named : ‘name’ , ‘height’,‘weight’ etc…what i want is to sort the column ‘height’ or ‘weight’ and get the fist 20 rows of column ‘name’ to a list back to python and then use the list to execute a command back to Streamlit…is this doable? If not it will be a great feature for Data Frames.

Fantastic App , although new to python and programming in general i have manged to do so much with it i never expected my self to achieve…many many Thanks!!!

Hey @andypapy, welcome to our community! :raised_hands:

Would something like this work?

Export-1694412557992

Code:

import streamlit as st
import pandas as pd

data = {
    'name': ['Alice', 'Bob', 'Charlie', 'David', 'Edward'],
    'height': [5.5, 6.1, 5.7, 6.0, 5.8],
    'weight': [150, 170, 160, 180, 170]
}
df = pd.DataFrame(data)

sort_column = st.selectbox('Select column to sort by:', df.columns[1:])
df_sorted = df.sort_values(by=sort_column, ascending=False)

st.dataframe(df_sorted)

N = 20
name_list = df_sorted['name'].head(N).tolist()

st.write(name_list)

Best,
Charly

Hi Charly and thanks for the reply.

The Dataframe is autosorting when i click on the column header ascending and descending…that re arranges the column ‘name’ order based on the column header i click…what i want to do is have a button and grab the first n to the list and then display them as you have shown…the code i was using is this:

names = df[‘name’].head(20).tolist()

show_list = st.button(‘show sorted list’)

if show_list :
st.write(names)

it displays the list without responding every time i click on the header of a column unchanged while in streamlit it is re arranged… i tried with a call back funcion but i was still getting only the initial order when streamlit is loading the first time!
any ideas how to get the list updated the way it appears in Streamlit Dataframe?