pandas.groupby()用于按照一定的条件(实际上就是指定一个或多个列)对数据集进行分组,分组后可以对各个分组做一些统计分析,如求和、平均值等。
在进行分组操作之前,首先需要创建一个数据集。
例如,创建一个记录销售额的数据集:
import pandas as pd
data = {
'购买次数':[1,2,3,1,2,3],
'商品':['A','B','C','A','B','C'],
'销售额':[200,250,380,350,420,480]
}
df = pd.DataFrame(data)
print(df)
输出结果:
购买次数 商品 销售额
0 1 A 200
1 2 B 250
2 3 C 380
3 1 A 350
4 2 B 420
5 3 C 480
根据商品对数据集进行分组操作,使用groupby()函数,传递的参数为一个或多个列名,表示对这些列进行分组。
例如,按照商品名称对数据集进行分组:
grouped = df.groupby('商品')
print(grouped)
输出结果:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fd3e156be50>
分组后,我们可以对每一个分组进行一些统计分析,如求和、平均值等。常用的函数有sum()、mean()、count()等。
例如,对商品为A的销售额进行求和操作:
grouped_sum = grouped['销售额'].sum()
print(grouped_sum)
输出结果:
商品
A 550
B 670
C 860
Name: 销售额, dtype: int64
有时候将分组后的数据展示在一起,可以更加清晰地显示数据分析结果。
例如,将所有分组的销售额和显示在一张表格中:
grouped_df = grouped_sum.reset_index()
print(grouped_df)
输出结果:
商品 销售额
0 A 550
1 B 670
2 C 860
接下来我们举两个实例:
分组统计学生成绩
import pandas as pd
data = {
'姓名':['张三','李四','王五','赵六','小明','小红','小刚','小亮'],
'性别':['男','男','男','男','男','女','女','女'],
'科目':['语文','语文','语文','语文','数学','数学','数学','数学'],
'成绩':[80,85,90,67,78,98,80,76]
}
df = pd.DataFrame(data)
print(df)
输出结果:
姓名 性别 科目 成绩
0 张三 男 语文 80
1 李四 男 语文 85
2 王五 男 语文 90
3 赵六 男 语文 67
4 小明 男 数学 78
5 小红 女 数学 98
6 小刚 女 数学 80
7 小亮 女 数学 76
# 按照科目对数据集进行分组操作
grouped = df.groupby('科目')
# 统计每个分组的平均分
grouped_mean = grouped['成绩'].mean()
print(grouped_mean)
输出结果:
科目
数学 83.0
语文 80.5
Name: 成绩, dtype: float64
分组计算销售额
import pandas as pd
data = {
'购买次数':[1,2,3,1,2,3],
'商品':['A','B','C','A','B','C'],
'销售额':[200,250,380,350,420,480]
}
df = pd.DataFrame(data)
print(df)
输出结果:
购买次数 商品 销售额
0 1 A 200
1 2 B 250
2 3 C 380
3 1 A 350
4 2 B 420
5 3 C 480
# 按照商品名称对数据进行分组操作
grouped = df.groupby('商品')
# 统计各商品的总销售额
grouped_sum = grouped['销售额'].sum()
# 将分组后的结果保存为CSV文件
grouped_sum.to_csv('sales.csv')
print(grouped_sum)
输出结果:
商品
A 550
B 670
C 860
Name: 销售额, dtype: int64
本文链接:http://task.lmcjl.com/news/17651.html