如何对 pandas 和 python 中的多列进行分组?
How to groupby multiple columns in pandas and python?
我有一个数据框,我想用多列执行 groupby
。
如果我通过代码 select 列,它就可以工作。
我想要的是允许用户从列列表中 select 和 return groupby result
.
当我添加此行时,系统崩溃并显示以下错误:
dda = df.groupby([primary_col_pyplot, [selected_column_names__pyplot]]) \
.size() \
.reset_index(name="count")
错误:
ValueError: Grouper and axis must be same length
代码:
import pandas as pd
import streamlit as st
df = pd.DataFrame({"source_number": [11199, 11328, 11287, 32345,
12342, 1232, 12342, 123244, 1235],
"location": ["USA", "USA", "USA", "INDIA", "INDIA",
"USA", "INDIA", "USA", "INDIA"],
"category": ["cat1", "cat2", "cat1", "cat1", "cat2",
"cat1", "cat2", "cat1", "cat1"],
})
df.head()
all_columns_names = df.columns.tolist()
primary_col_pyplot = st.selectbox("Primary Column To GroupBy", all_columns_names)
selected_column_names__pyplot = st.multiselect("Select Columns", all_columns_names)
dda = df.groupby(["category", "location", "source_number"])\
.size()\
.reset_index(name="count")
print(dda)
预期结果:
category location source_number count
0 cat1 INDIA 1235 1
1 cat1 INDIA 32345 1
2 cat1 USA 1232 1
3 cat1 USA 11199 1
4 cat1 USA 11287 1
5 cat1 USA 123244 1
6 cat2 INDIA 12342 2
7 cat2 USA 11328 1
在查找 streamlit 后,我假设您的 st.selectbox 仅提供一个字符串(select 的一列)。
st.multiselect 提供了一个列表。 (多列 select)。但如果这可能不正确,请尝试调试它,并查看primary_col_pyplot和selected_column_names__pyplot在不同场景下的值,以确保。
所以我们有一个字符串和一个字符串列表。然后串联的 groupby 将工作为:
dda = df.groupby([primary_col_pyplot] + selected_column_names__pyplot) \
.size() \
.reset_index(name="count")
我有一个数据框,我想用多列执行 groupby
。
如果我通过代码 select 列,它就可以工作。
我想要的是允许用户从列列表中 select 和 return groupby result
.
当我添加此行时,系统崩溃并显示以下错误:
dda = df.groupby([primary_col_pyplot, [selected_column_names__pyplot]]) \
.size() \
.reset_index(name="count")
错误:
ValueError: Grouper and axis must be same length
代码:
import pandas as pd
import streamlit as st
df = pd.DataFrame({"source_number": [11199, 11328, 11287, 32345,
12342, 1232, 12342, 123244, 1235],
"location": ["USA", "USA", "USA", "INDIA", "INDIA",
"USA", "INDIA", "USA", "INDIA"],
"category": ["cat1", "cat2", "cat1", "cat1", "cat2",
"cat1", "cat2", "cat1", "cat1"],
})
df.head()
all_columns_names = df.columns.tolist()
primary_col_pyplot = st.selectbox("Primary Column To GroupBy", all_columns_names)
selected_column_names__pyplot = st.multiselect("Select Columns", all_columns_names)
dda = df.groupby(["category", "location", "source_number"])\
.size()\
.reset_index(name="count")
print(dda)
预期结果:
category location source_number count
0 cat1 INDIA 1235 1
1 cat1 INDIA 32345 1
2 cat1 USA 1232 1
3 cat1 USA 11199 1
4 cat1 USA 11287 1
5 cat1 USA 123244 1
6 cat2 INDIA 12342 2
7 cat2 USA 11328 1
在查找 streamlit 后,我假设您的 st.selectbox 仅提供一个字符串(select 的一列)。 st.multiselect 提供了一个列表。 (多列 select)。但如果这可能不正确,请尝试调试它,并查看primary_col_pyplot和selected_column_names__pyplot在不同场景下的值,以确保。
所以我们有一个字符串和一个字符串列表。然后串联的 groupby 将工作为:
dda = df.groupby([primary_col_pyplot] + selected_column_names__pyplot) \
.size() \
.reset_index(name="count")