可点击的数据框行来触发详细的显示流

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

我的代码如下:

import pandas as pd
import streamlit as st

main_data = {
    'name': ['Xavier', 'Ann', 'Jana', 'Yi', 'Robin', 'Amal', 'Nori'],
}
row_labels = [101, 102, 103, 104, 105, 106, 107]
df_main = pd.DataFrame(data=main_data, index=row_labels)

data = {
    'name': ['Xavier', 'Ann', 'Jana', 'Yi', 'Robin', 'Amal', 'Nori'],
    'city': ['Mexico City', 'Toronto', 'Prague', 'Shanghai',
             'Manchester', 'Cairo', 'Osaka'],
    'age': [41, 28, 33, 34, 38, 31, 37],
    'py-score': [88.0, 79.0, 81.0, 80.0, 68.0, 61.0, 84.0]
}


df = pd.DataFrame(data=data, index=row_labels)
st.dataframe(df_main)

结果如下:

我有两个问题: 第一个是: 我希望当我单击任何行时显示 df 数据框中的详细信息,第二个是我想完全显示数据框而不滚动。

python pandas dataframe streamlit
1个回答
2
投票

您可以使用

st_aggrid
来执行此操作,这是一种方法。您不需要两个数据框,只需使用一个
df
但仅向用户显示相关字段。

import pandas as pd
import streamlit as st
from st_aggrid import GridOptionsBuilder, AgGrid, GridUpdateMode, ColumnsAutoSizeMode


data = {
    'row_labels': [101, 102, 103, 104, 105, 106, 107],
    'name': ['Xavier', 'Ann', 'Jana', 'Yi', 'Robin', 'Amal', 'Nori'],
    'city': ['Mexico City', 'Toronto', 'Prague', 'Shanghai',
             'Manchester', 'Cairo', 'Osaka'],
    'age': [41, 28, 33, 34, 38, 31, 37],
    'py-score': [88.0, 79.0, 81.0, 80.0, 68.0, 61.0, 84.0]
}
df = pd.DataFrame(data)

# select the columns you want the users to see
gb = GridOptionsBuilder.from_dataframe(df[["row_labels", "name"]])
# configure selection
gb.configure_selection(selection_mode="single", use_checkbox=True)
gb.configure_side_bar()
gridOptions = gb.build()

data = AgGrid(df,
              gridOptions=gridOptions,
              enable_enterprise_modules=True,
              allow_unsafe_jscode=True,
              update_mode=GridUpdateMode.SELECTION_CHANGED,
              columns_auto_size_mode=ColumnsAutoSizeMode.FIT_CONTENTS)

selected_rows = data["selected_rows"]

if selected_rows is not None:
    if len(selected_rows) != 0:
        col1, col2, col3, col4 = st.columns(4)

        with col1:
            st.markdown("##### Name")
            st.markdown(f":orange[{selected_rows['name']}]")
        with col2:
            st.markdown("##### City")
            st.markdown(f":orange[{selected_rows['city']}]")
        with col3:
            st.markdown("##### Age")
            st.markdown(f":orange[{selected_rows['age']}]")
        with col4:
            st.markdown("##### Py Score")
            st.markdown(f":orange[{selected_rows['py-score']}]")
© www.soinside.com 2019 - 2024. All rights reserved.