pandas groupby 排序

pandas groupby 排序

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对数据进行分组并进行排序。通过示例,我们学习了基础排序、多列分组排序以及自定义排序函数。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程