Pandas groupby分组操作详解
在数据分析中,经常会遇到这样的情况:根据某一列(或多列)标签把数据划分为不同的组别,然后再对其进行数据分析。比如,某网站对注册用户的性别或者年龄等进行分组,从而研究出网站用户的画像(特点)。在 Pandas 中,要完成数据的分组操作,需要使用 groupby() 函数,它和 SQL 的GROUP BY操作非常相似。
在划分出来的组(group)上应用一些统计函数,从而达到数据分析的目的,比如对分组数据进行聚合、转换,或者过滤。这个过程主要包含以下三步:
拆分(Spliting):表示对数据进行分组;
应用(Applying):对分组数据应用聚合函数,进行相应计算;
合并(Combining):最后汇总计算结果。
下面对 groupby() 函数的应用过程进行具体的讲解。
创建DataFrame对象
首先我们创建一个 DataFrame 对象,下面数据描述了某班学生,计算机选修课的考试成绩:
import pandas as pd
import numpy as np
data = {
'Name': ['John', 'Helen', 'Sona', 'Ella'],
'score': [82, 98, 91, 87],
'option_course': ['C#','Python','Java','C']}
df = pd.DataFrame(data)
print(df)
输出结果:
Name score option_course
0 John 82 C#
1 Helen 98 Python
2 Sona 91 Java
3 Ella 87 C
创建groupby分组对象
使用 groupby() 可以沿着任意轴分组。您可以把分组时指定的键(key)作为每组的组名,方法如下所示:
df.groupby("key")
df.groupby("key",axis=1)
df.groupby(["key1","key2"])
通过上述方法对 DataFrame 对象进行分组操作:
import pandas as pd
import numpy as np
data = {
'Name': ['John', 'Helen', 'Sona', 'Ella'],
'score': [82, 98, 91, 87],
'option_course': ['C#','Python','Java','C']}
df = pd.DataFrame(data)
print(df)
#生成分组groupby对象
print(df.groupby('score'))
输出结果:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000021DE9A89640>
查看分组结果
1) groups查看分组结果
通过调用groups属性查看分组结果:
import pandas as pd
import numpy as np
data = {
'Name': ['John', 'Helen', 'Sona', 'Ella'],
'score': [82, 98, 91, 87],
'option_course': ['C#','Python','Java','C']}
df = pd.DataFrame(data)
#查看分组
print(df.