Py.Cafe

popcorn1939/

solara-table-sorting

Interactive Table Sorting with Solara and Pandas

DocsPricing
  • app.py
  • requirements.txt
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#Solara POC: Sort Table DataFrame
#Filename: sort_table_df.py
#https://www.youtube.com/watch?v=ATqbBIty32U
#this video tutorial how to sort table dataframe in solara framework

import solara
import pandas as pd
# reactive variables will trigger a component rerender
# when changed.
# When you change the default (now 0), hit the embedded browser
# refresh button to reset the state



@solara.component
def Page():

    sort_by_name = solara.use_reactive(True)
    sort_by_age = solara.use_reactive(True)

    # And now I will make fake data
    mydata = solara.use_reactive([
        {"name":"jdsdfj","age":21},
        {"name":"Alfa","age":45},
        {"name":"Dorte","age":17},
        {"name":"Dennis","age":34},
        {"name":"Niels","age":52}
    ])

    df = pd.DataFrame(mydata.value)
    # And Render to Table
    df_widget = solara.DataFrame(df)


    def sort_name():
        nonlocal mydata
        mydata.value = sorted(mydata.value,key=lambda x:x['name'],
            reverse=sort_by_name.value
            )
        sort_by_name.set(not sort_by_name.value)


    def sort_age():
        nonlocal mydata
        mydata.value = sorted(mydata.value, key=lambda x:x['age'],
            reverse=sort_by_age.value
            )
        sort_by_age.set(not sort_by_age.value)


    with solara.Column(margin=10):
        with solara.Row():
            # And now I will make button for sort of name and age
            with solara.Row():
                solara.Text("sort by name")
                solara.Button("sort",
                color="success",
                on_click=sort_name
                )

            with solara.Row():
                solara.Text("sort by age")
                solara.Button("sort",
                color="success",
                on_click=sort_age
                )

        df_widget