📅  最后修改于: 2023-12-03 14:45:02.641000             🧑  作者: Mango
在数据分析和处理中,经常需要按照某些列对数据进行分组,并对每个分组计算统计量,这就是Pandas groupby操作。本文将介绍如何同时对多个列进行groupby操作。
我们采用一份简单的示例数据,该数据包含了用户购买某种商品的历史信息。其中,包括用户ID、购买日期、购买地点、购买数量、购买金额以及商品类型等字段。数据如下:
| 用户ID | 购买日期 | 购买地点 | 购买数量 | 购买金额 | 商品类型 | | ------ | -------- | -------- | --- | ------ | ------ | | 1 | 2022-10-01 | 北京 | 3 | 10.5 | A | | 1 | 2022-10-01 | 上海 | 1 | 4.5 | A | | 2 | 2022-10-02 | 深圳 | 2 | 7.5 | B | | 2 | 2022-10-02 | 上海 | 1 | 3.5 | B | | 3 | 2022-10-03 | 广州 | 5 | 20 | C | | 3 | 2022-10-04 | 北京 | 2 | 9 | A |
在groupby多列操作中,我们将按照"用户ID"和"购买日期"对数据进行分组,并对每个分组计算"购买数量"和"购买金额"的总和。
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# groupby多列操作
grouped = data.groupby(['用户ID', '购买日期'])[['购买数量', '购买金额']].sum()
# 打印结果
print(grouped)
运行结果如下所示:
购买数量 购买金额
用户ID 购买日期
1 2022-10-01 4 15.0
2 2022-10-02 3 11.0
3 2022-10-03 5 20.0
2022-10-04 2 9.0
从结果中可以看出,我们按照"用户ID"和"购买日期"对数据进行了分组操作,并计算了"购买数量"和"购买金额"的总和。最终得到了一个新的DataFrame对象,并按照层次化索引的形式进行了排列。
在groupby多列操作中,还可以使用agg()方法对每个分组进行复杂的统计计算。例如,我们将按照"用户ID"和"购买日期"对数据进行分组,并对每个分组计算"购买数量"和"购买金额"的均值、方差、最大值、最小值和中位数。
import pandas as pd
# 读取数据
data = pd.read_csv('data.csv')
# groupby多列操作-复杂统计量
grouped = data.groupby(['用户ID', '购买日期'])[['购买数量', '购买金额']].agg(['mean', 'var', 'max', 'min', 'median'])
# 打印结果
print(grouped)
运行结果如下所示:
购买数量 购买金额
mean var max min median mean var max min median
用户ID 购买日期
1 2022-10-01 2.0 1 3 1.0 2.0 7.50 16.5625 10.5 4.5 7.5
2 2022-10-02 1.5 0 2 1.0 1.5 5.50 4.5000 7.5 3.5 5.5
3 2022-10-03 5.0 0 5 5.0 5.0 20.0 0.0000 20.0 20.0 20.0
2022-10-04 2.0 0 2 2.0 2.0 9.00 0.0000 9.0 9.0 9.0
从结果中可以看出,我们按照"用户ID"和"购买日期"对数据进行了分组操作,并计算了"购买数量"和"购买金额"的均值、方差、最大值、最小值和中位数。最终得到了一个新的DataFrame对象,并按照层次化索引的形式进行了排列。
通过以上示例,我们可以看到,Pandas groupby操作提供了非常强大的数据按列分组、统计计算和重组的功能,而且非常方便易用。在数据分析和处理中,经常需要使用groupby操作进行数据清理和预处理。因此,熟练掌握Pandas groupby操作是每个数据分析师必备的技能之一。