我有一个分组函数,我希望将多个列分组,以便稍后绘制图表。当用户从selectbox
和multiselect
小部件中选择数据框时,数据框的列是动态的问题是,我现在能够从multiselect
小部件中获取第一个或最后一个项目,如下所示:
some_columns_df = df.loc[:,['gender','country','city','hoby','company','status']]
some_collumns = some_columns_df.columns.tolist()
select_box_var= st.selectbox("Choose X Column",some_collumns)
multiselect_var= st.multiselect("Select Columns To GroupBy",some_collumns)
test_g3 = df.groupby([select_box_var,multiselect_var[0]]).size().reset_index(name='count')
如果用户从multiselect
中选择了1个以上的项目,假设他选择了4个项目,它变成如下所示:
test_g3 = df.groupby([select_box_var,multiselect_var[0,1,2,3]]).size().reset_index(name='count')
这可能吗?
multiselect_var
是一个列表,而select_box_var
是单个变量。把它放到一个列表中,并把两个列表加在一起。
试试这个:
test_g3 = df.groupby([select_box_var] + multiselect_var).size().reset_index(name='count')
从streamlit文档中选择多选,api总是返回一个列表。你的selectbox返回一个字符串,因为你有一个字符串列表作为选项。
所以你的代码可以修改为
df.groupby([select_box_var] + multiselect_var).size().reset_index(name='count')