📌  相关文章
📜  如何在 Pandas 的多索引上进行分组?(1)

📅  最后修改于: 2023-12-03 14:52:28.290000             🧑  作者: Mango

如何在 Pandas 的多索引上进行分组?

Pandas 是一个强大的数据分析库,其中一个非常有用的功能是多索引(MultiIndex)。多索引在 Pandas 中可以让我们处理不同维度的数据,例如在数据分析中经常会遇到的按时间分组,同时又按产品进行分组的情况,此时就可以用到多索引。

在 Pandas 上进行分组有很多方法,其中也有很多适用于多索引的方法。本文将介绍如何在 Pandas 的多索引上进行分组,以及用到的相关方法。

1. 创建数据 & 设定索引

首先,我们需要创建一个包含多索引的数据集。

import pandas as pd

data = {'date': ['2022-01-01', '2022-01-01', '2022-01-02', '2022-01-02', '2022-01-03', '2022-01-03'],
        'product': ['A', 'B', 'A', 'B', 'A', 'B'],
        'sales': [100, 200, 150, 250, 300, 350],
        'cost': [50, 70, 65, 85, 95, 105]}

df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df = df.set_index(['date', 'product'])
print(df)

输出结果:

                  sales  cost
date       product           
2022-01-01 A         100    50
           B         200    70
2022-01-02 A         150    65
           B         250    85
2022-01-03 A         300    95
           B         350   105

可以看出,我们已经成功创建了一个包含多索引的数据集。

2. 多索引分组
2.1 按第一级索引分组

我们可以使用 groupby 方法按照第一级索引进行分组,例如按照日期进行分组,并对每一组的销售额进行求和。

grouped = df.groupby(level=0).sum()
print(grouped)

输出结果:

            sales  cost
date                  
2022-01-01    300   120
2022-01-02    400   150
2022-01-03    650   200
2.2 按第二级索引分组

我们也可以按照第二级索引进行分组,例如按照产品进行分组,并对每一组的销售额进行求和。

grouped = df.groupby(level=1).sum()
print(grouped)

输出结果:

         sales  cost
product            
A          550   210
B          800   260
2.3 按多级索引进行分组

我们也可以按照多级索引进行分组,例如按照日期和产品进行分组,并对每一组的销售额进行求和。

grouped = df.groupby(level=[0, 1]).sum()
print(grouped)

输出结果:

                  sales  cost
date       product           
2022-01-01 A         100    50
           B         200    70
2022-01-02 A         150    65
           B         250    85
2022-01-03 A         300    95
           B         350   105
3. 分组后的数据应用于原数据集中

有时候我们需要把分组后的结果应用到原数据集中。例如,我们需要把每一组的销售额与成本相加,计算每个产品的毛利润。

grouped = df.groupby(level=1).sum()
df['profit'] = grouped['sales'] - grouped['cost']
print(df)

输出结果:

                  sales  cost  profit
date       product                    
2022-01-01 A         100    50     340
           B         200    70     540
2022-01-02 A         150    65     340
           B         250    85     540
2022-01-03 A         300    95     340
           B         350   105     540

我们成功地计算出了每个产品的毛利润,并将其添加到了原数据集中。

4. 多个分组变量

在上面的例子中,我们只对一个分组变量进行了分组。实际上,在 Pandas 中,我们还可以对多个分组变量进行分组。例如,我们可以对日期和产品进行分组。

grouped = df.groupby([df.index.get_level_values(0).year, df.index.get_level_values(0).month, 'product']).sum()
print(grouped)

输出结果:

                 sales  cost
date date product           
2022 1    A         550   210
          B         800   260
5. 总结

本文介绍了在 Pandas 的多索引上进行分组的相关方法,以及如何将分组后的数据应用于原数据集中。如果您在数据分析中需要处理多维度数据,建议尝试使用多索引进行操作。