如何使用streamlit ag-grid选择过滤行?

问题描述 投票:0回答:4

我正在使用streamlit Ag-Grid来显示表格。我允许用户使用过滤器选项进行过滤。

table filter

当用户过滤任何列时,它会按预期工作。

我现在想允许用户仅下载过滤后的行。

我知道此功能仍在开发中,但是如果我可以允许用户通过单击“检查所有行”选项来检查所有过滤的行,那么它现在就可以使用。

我知道这个选项是可用的,但我似乎无法让它显示出来。

你们能帮我吗? 谢谢你

gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(enablePivot=True, enableValue=True, enableRowGroup=True)
gb.configure_selection(selection_mode="multiple", use_checkbox=True)
gb.configure_side_bar()
gridoptions = gb.build()

response = AgGrid(
    df,
    gridOptions=gridoptions,
    enable_enterprise_modules=True,
    update_mode=GridUpdateMode.MODEL_CHANGED,
    data_return_mode=DataReturnMode.FILTERED_AND_SORTED,
    fit_columns_on_grid_load=False,
    header_checkbox_selection_filtered_only=True,
    use_checkbox=True)
python ag-grid streamlit
4个回答
1
投票

过滤后的行将出现在响应中。响应是一个带有键

data
selected_rows
的字典。 selected_rows 是一个 dict 列表,我们只需将其转换为 pandas df 并进一步将其转换为 csv 以供下载。

代码
from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode, DataReturnMode
import pandas as pd
import streamlit as st


data = {'cpu': ['Intel Core i7-12700K', 'Intel Core i9-12900K',
                'Intel Core i9-10850K', 'Intel Core i5-11400F'],
        'price': [350, 560, 300, 160]}


@st.cache
def convert_df(df):
    # IMPORTANT: Cache the conversion to prevent computation on every rerun
    return df.to_csv(index=False).encode('utf-8')


df = pd.DataFrame(data)

gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(enablePivot=True, enableValue=True, enableRowGroup=True)
gb.configure_selection(selection_mode="multiple", use_checkbox=True)
gb.configure_side_bar()
gridoptions = gb.build()

response = AgGrid(
    df,
    height=200,
    gridOptions=gridoptions,
    enable_enterprise_modules=True,
    update_mode=GridUpdateMode.MODEL_CHANGED,
    data_return_mode=DataReturnMode.FILTERED_AND_SORTED,
    fit_columns_on_grid_load=False,
    header_checkbox_selection_filtered_only=True,
    use_checkbox=True)

# st.write(type(response))
# st.write(response.keys())

v = response['selected_rows']
if v:
    st.write('Selected rows')
    st.dataframe(v)
    dfs = pd.DataFrame(v)
    csv = convert_df(dfs)

    st.download_button(
        label="Download data as CSV",
        data=csv,
        file_name='selected.csv',
        mime='text/csv',
    )
样本输出

csv 输出
cpu,price
Intel Core i7-12700K,350
Intel Core i9-10850K,300

0
投票

我能够通过使用response['data']以及第一个答案中的相同参数来获取过滤后的行


0
投票
# A little fix to the before solution

@st.cache
def convert_df(df):
    # IMPORTANT: Cache the conversion to prevent computation on every rerun
    return df.to_csv(index=False).encode('utf-8')


df = pd.DataFrame(data)

gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(enablePivot=True, enableValue=True, enableRowGroup=True)
gb.configure_selection(selection_mode="multiple", use_checkbox=True)
gb.configure_side_bar()
gridoptions = gb.build()

response = AgGrid(
    df,
    height=200,
    gridOptions=gridoptions,
    enable_enterprise_modules=True,
    update_mode=GridUpdateMode.MODEL_CHANGED,
    data_return_mode=DataReturnMode.FILTERED_AND_SORTED,
    fit_columns_on_grid_load=False,
    header_checkbox_selection_filtered_only=True,
    use_checkbox=True)

    filterbtm = st.button('Get filred data')
    if filterebtn:
       st.table(response['data'])

0
投票

由于您使用

data_return_mode = DataReturnMode.FILTERED_AND_SORTED
作为 Aggrid 对象中的参数,过滤后的数据将作为完整数据存储在
response['data']
中。因此,要下载过滤后的数据,您只需下载
response['data']
中包含的数据框,就像通常下载任何其他数据框一样。例如:

df = response['data']
df.to_csv(index=False)
© www.soinside.com 2019 - 2024. All rights reserved.