pandas groupby 排序
在数据处理和分析中,经常会使用到pandas这个强大的库。pandas中的groupby功能是非常实用的,可以对数据进行分组后进行各种操作。在groupby之后,有时候我们需要对分组后的数据进行排序,本文将介绍如何使用pandas进行groupby排序。
1. groupby排序基础
首先,我们先创建一个包含分组数据的DataFrame:
import pandas as pd
data = {
'Region': ['East', 'West', 'South', 'East', 'West', 'South'],
'Country': ['US', 'US', 'US', 'Canada', 'Canada', 'Canada'],
'Sales': [100, 200, 150, 300, 250, 180]
}
df = pd.DataFrame(data)
print(df)
运行结果:
Region Country Sales
0 East US 100
1 West US 200
2 South US 150
3 East Canada 300
4 West Canada 250
5 South Canada 180
接下来,我们使用groupby对数据进行分组,并计算各组的销售额之和:
grouped = df.groupby('Country')['Sales'].sum().reset_index()
print(grouped)
运行结果:
Country Sales
0 Canada 730
1 US 450
如果我们想要对这些分组后的数据按销售额进行降序排序,可以使用sort_values方法:
sorted_grouped = grouped.sort_values(by='Sales', ascending=False)
print(sorted_grouped)
运行结果:
Country Sales
0 Canada 730
1 US 450
通过以上示例,我们可以看到如何对groupby结果进行排序。
2. 多列分组排序
除了单列分组排序外,有时候我们需要对多列进行分组排序。下面我们来看一个示例:
import numpy as np
data = {
'Region': ['East', 'East', 'West', 'West', 'East', 'West'],
'Country': ['US', 'US', 'US', 'Canada', 'Canada', 'Canada'],
'Sales': [100, 200, 150, 300, 250, 180],
'Profit': [10, 20, 15, 30, 25, 18]
}
df = pd.DataFrame(data)
print(df)
运行结果:
Region Country Sales Profit
0 East US 100 10
1 East US 200 20
2 West US 150 15
3 West Canada 300 30
4 East Canada 250 25
5 West Canada 180 18
我们可以对Region和Country这两列进行分组,并计算总销售额和总利润:
grouped = df.groupby(['Region', 'Country'])[['Sales', 'Profit']].sum().reset_index()
print(grouped)
运行结果:
Region Country Sales Profit
0 East Canada 250 25
1 East US 300 30
2 West Canada 480 48
3 West US 150 15
如果我们想根据Region和Country两列的销售额进行降序排列:
sorted_grouped = grouped.sort_values(by=['Region', 'Sales'], ascending=[True, False])
print(sorted_grouped)
运行结果:
Region Country Sales Profit
1 East US 300 30
0 East Canada 250 25
2 West Canada 480 48
3 West US 150 15
如此,我们便完成了多列分组排序。
3. 自定义排序函数
除了使用sort_values方法外,我们还可以使用自定义的排序函数对groupby结果进行排序。下面是一个示例:
首先,定义一个自定义排序函数,按照Sales和Profit的和进行排序:
def custom_sort(group):
return group['Sales'].sum() + group['Profit'].sum()
sorted_grouped = df.groupby(['Region', 'Country']).apply(custom_sort).reset_index(name='Total').sort_values(by='Total', ascending=False)
print(sorted_grouped)
运行结果:
Region Country Total
2 West Canada 528
1 East US 330
0 East Canada 275
3 West US 165
通过自定义的排序函数,我们成功对groupby结果进行了自定义排序。
结语
本文介绍了如何在pandas中使用groupby对数据进行分组并进行排序。通过示例,我们学习了基础排序、多列分组排序以及自定义排序函数。