如何按熊猫系列的多列分组

时间:2019-12-02 13:01:28

标签: series

pandas.Series groupby方法可以对另一个系列进行分组,例如:

data = {'gender': ['Male', 'Male', 'Female', 'Male'], 'age': [20, 21, 20, 20]}
df = pd.DataFrame(data)
grade = pd.Series([5, 6, 7, 4])
grade.groupby(df['age']).mean()

但是,这种方法不适用于使用两列的分组:

grade.groupby(df[['age','gender']])

ValueError:类pandas.core.frame.DataFrame的Grouper不是一维的。

在示例中,很容易将列添加到数据框中并获得所需的结果,如下所示:

df['grade'] = grade
y = df.groupby(['gender','age']).mean()
y.to_dict()

{'成绩':{('女',20):7.0,('男',20):4.5,('男',21):6.0}}

但是在现实生活中,这可能会变得很丑陋。有什么办法可以直接在系列的多列上进行分组?

1 个答案:

答案 0 :(得分:0)

由于我不知道有什么直接方法可以解决问题,因此我制作了一个函数,该函数可以创建一个临时表并对其执行groupby。

viewModelScope.launch

在这里, group_obj 可以是熊猫系列或熊猫数据框。从示例代码开始,可以通过以下方式获得所需结果:

def pd_groupby(series,group_obj):
    df = pd.DataFrame(group_obj).copy()
    groupby_columns = list(df.columns)
    df[series.name] = series
    return df.groupby(groupby_columns)[series.name]

{('Female',20):7.0,('Male',20):4.5,('Male',21):6.0}