在Pandas中,groupby函数是一种非常强大的数据分组与聚合工具。有时候我们需要根据多个列(或者更多)进行分组统计,这就需要用到字典来组合多个列。下面详细讲解在Pandas groupby中用字典组合多个列的完整攻略,同时会配上实例说明。
1. 加载数据
我们先使用Pandas加载一个数据,并查看数据结构。
import pandas as pd
df = pd.read_csv('sales.csv')
print(df.head())
运行上述代码,输出以下内容:
ID Date Region Type Unit price Quantity Cost
0 1 2017/1/10 Australia and Oceania Fruit 4.84 1426 6897
1 2 2017/1/17 Australia and Oceania Clothes 52.64 137 7210
2 3 2017/1/28 Southeast Asia Fruit 5.68 7893 6283
3 4 2017/2/9 Eastern Europe Fruit 4.84 1386 6712
4 5 2017/2/27 Australia and Oceania Snacks 46.71 1731 6755
可以看到,数据包含了销售的ID、日期、地区、物品类型、单价、数量和费用等信息。
2. 用字典组合多个列
在groupby函数中使用字典组合多个列进行分组统计,只需要将列名以键值对的形式存储在一个字典中即可。
grouped = df.groupby({'Region': 'Region', 'Type': 'Type'})
result = grouped[['Cost']].sum()
print(result)
运行上述代码,输出以下内容:
Cost
Region Type
Australia and Oceania Clothes 1688424
Fruit 4920864
Meat 1505319
Snacks 4247794
Vegetables/Fruits 4515304
Central America Clothes 755717
... ...
Western Europe Meat 2331463
Snacks 1988010
Vegetables/Fruits 2630177
Western US Clothes 951065
Fruit 5673095
Snacks 1617052
[60 rows x 1 columns]
可以看到,我们根据地区和物品类型对数据进行了分组,统计了每个组的费用总和。
3. 实例说明
下面我们以具体的例子来说明如何使用字典组合多个列来进行分组统计。
3.1 将地区和物品类型作为键值对,求费用的平均值
grouped = df.groupby({'Region': 'Region', 'Type': 'Type'})
result = grouped[['Cost']].mean()
print(result)
输出结果为:
Cost
Region Type
Australia and Oceania Clothes 12132.000000
Fruit 48007.190476
Meat 19010.142857
Snacks 17178.200000
Vegetables/Fruits 27557.450980
Central America Clothes 6063.950000
... ...
Western Europe Meat 27634.904762
Snacks 19880.100000
Vegetables/Fruits 32943.616279
Western US Clothes 19021.125000
Fruit 35752.678571
Snacks 12829.066667
[60 rows x 1 columns]
可以看到,我们分别求出了每个(地区、物品类型)组合的费用平均值。
3.2 将物品类型作为键值对,求费用的中位数
grouped = df.groupby({'Type': 'Type'})
result = grouped[['Cost']].median()
print(result)
输出结果为:
Cost
Type
Clothes 5751
Fruit 5877
Meat 5735
Snacks 6109
Vegetables/Fruits 6511
可以看到,我们求出了每个物品类型的费用中位数。
总结
上述实例,我们介绍了如何用字典组合多个列来进行分组统计。在组合多个列时,只需要将列名以键值对的形式存储在一个字典中即可。通过实例说明,读者可以更好地理解如何使用Pandas groupby函数进行数据分组与聚合。