📅  最后修改于: 2023-12-03 14:52:28.290000             🧑  作者: Mango
Pandas 是一个强大的数据分析库,其中一个非常有用的功能是多索引(MultiIndex)。多索引在 Pandas 中可以让我们处理不同维度的数据,例如在数据分析中经常会遇到的按时间分组,同时又按产品进行分组的情况,此时就可以用到多索引。
在 Pandas 上进行分组有很多方法,其中也有很多适用于多索引的方法。本文将介绍如何在 Pandas 的多索引上进行分组,以及用到的相关方法。
首先,我们需要创建一个包含多索引的数据集。
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
可以看出,我们已经成功创建了一个包含多索引的数据集。
我们可以使用 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
我们也可以按照第二级索引进行分组,例如按照产品进行分组,并对每一组的销售额进行求和。
grouped = df.groupby(level=1).sum()
print(grouped)
输出结果:
sales cost
product
A 550 210
B 800 260
我们也可以按照多级索引进行分组,例如按照日期和产品进行分组,并对每一组的销售额进行求和。
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
有时候我们需要把分组后的结果应用到原数据集中。例如,我们需要把每一组的销售额与成本相加,计算每个产品的毛利润。
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
我们成功地计算出了每个产品的毛利润,并将其添加到了原数据集中。
在上面的例子中,我们只对一个分组变量进行了分组。实际上,在 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
本文介绍了在 Pandas 的多索引上进行分组的相关方法,以及如何将分组后的数据应用于原数据集中。如果您在数据分析中需要处理多维度数据,建议尝试使用多索引进行操作。