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}}
但是在现实生活中,这可能会变得很丑陋。有什么办法可以直接在系列的多列上进行分组?
答案 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}