Pandas之groupby分组
Posted 康威特冶楼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas之groupby分组相关的知识,希望对你有一定的参考价值。
释义
groupby
用来分组,调用groupby
之后返回pandas.core.groupby.generic.DataFrameGroupBy
,其实就是由一个个格式为(key, 分组后的dataframe)
的元组,组成的列表:
[(key1, dataframe1), (key2, dataframe2), ...]
案例
- 初始化数据,此时这个班级有2个同名的人都叫Jack
df = pd.DataFrame({\'stu_name\': [\'Tom\', \'Tony\', \'Jack\', \'Jack\'], \'stu_age\': [16, 16, 15, 21]})
print(df)
stu_name stu_age
0 Tom 16
1 Tony 16
2 Jack 15
3 Jack 21
- 根据
stu_name
进行分组,根据上面的释义,则可以遍历列表中的每个元组
groups = df.groupby([\'stu_name\'])
for v in groups:
print(v)
(\'Jack\', stu_name stu_age
2 Jack 15
3 Jack 21)
(\'Tom\', stu_name stu_age
0 Tom 16)
(\'Tony\', stu_name stu_age
1 Tony 16)
显而易见,每个元素v中,v[0]是groupby的列名,v[1]就是该分组下的dataframe
groupby之后的聚合操作
groupby之后更常见的是使用各种聚合函数,如
- min:最小值
- max:最大值
- sum:总和
- mean:平均值
- median:中位数
- count:计数
- var:方差
- std:标准差
案例
- 初始化数据
df = pd.DataFrame({\'stu_name\': [\'Tom\', \'Tony\', \'Jack\', \'Jack\'], \'stu_age\': [16, 16, 15, 21], \'stu_score\': [99, 1, 1, 0]})
stu_name stu_age stu_score
0 Tom 16 99
1 Tony 16 1
2 Jack 15 1
3 Jack 21 0
- 以名字分组,并对分组后的年龄、成绩求和(例子不具备显示意义,仅做演示)
sum_df = df.groupby([\'stu_name\']).sum()
print(sum_df)
stu_age stu_score
stu_name
Jack 36 1
Tom 16 99
Tony 16 1
groupby之后直接调用聚合函数,会对所有的列进行聚合操作,但有些时候需要在分组后对多个列进行不同的聚合操作,比如groupby之后,年龄求和,分数求平均值,这时候就需要使用agg函数
groupby之后使用agg函数
- 沿用上面的原始数据,以名字分组,分组后年龄求和,成绩求平均值
agg_df = df.groupby([\'stu_name\']).agg({\'stu_age\': \'sum\', \'stu_score\': \'mean\'})
print(agg_df)
stu_age stu_score
stu_name
Jack 36 0.5
Tom 16 99.0
Tony 16 1.0
可以看出如果groupby后要对分组内所有的列都进行一样的操作,那直接调用相关的聚合函数即可,如果是分组后不同的列进行不同的聚合操作,则可以直接采用agg函数。
以上是关于Pandas之groupby分组的主要内容,如果未能解决你的问题,请参考以下文章