在Pandas groupby中用字典组合多个列

  • Post category:Python

在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函数进行数据分组与聚合。