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?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.