pandas组由python和streamlit的多列组成



我有一个分组函数,我希望将多个列分组,以便稍后绘制图表。当用户从selectboxmultiselect小部件中选择数据框时,数据框的列是动态的问题是,我现在能够从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')