pandas分组聚合详解

Pandas 分组聚合详解

简介

在数据处理中,很常见的一种需求是把数据按照某些标准进行分组,然后在每个组内进行聚合操作。比如求每个人的年龄平均值,在每个城市中计算房价的均值等等。这个时候Pandas的分组聚合就可以帮我们轻松实现。

分组操作

Pandas中的分组操作主要是通过groupby()函数来实现的。下面我们用一个示例数据集进行分析:

import pandas as pd
import numpy as np

data = pd.DataFrame({'group':['a', 'a', 'b', 'b', 'c', 'c'],
                     'value':[1, 2, 3, 4, 5, 6]})
print(data)

输出结果如下:

  group  value
0     a      1
1     a      2
2     b      3
3     b      4
4     c      5
5     c      6

现在我们想按照group这一列进行分组,然后再对每个组内的value求和:

grouped = data.groupby('group')
result = grouped['value'].sum()
print(result)

输出结果如下:

group
a    3
b    7
c    11
Name: value, dtype: int64

可以看到,我们按照group这一列分成了三组,然后对每组分别求和,得到了一个新的Series对象。

聚合函数

对于每个分组,我们可以对其应用多个聚合函数。Pandas内置了很多聚合函数,可以满足大多数需求。如下是一个列表:

函数 描述
count 非NA值的数量
sum 求和
mean 均值
median 中位数
min 最小值
max 最大值
prod 乘积
std 标准差
var 方差

这些函数都可以作为groupby()函数的参数,应用于每个分组。例如,我们想同时求出每个组的均值和标准差:

grouped = data.groupby('group')
result = grouped['value'].agg([np.mean, np.std])
print(result)

输出结果如下:

           mean       std
group                    
a      1.500000  0.707107
b      3.500000  0.707107
c      5.500000  0.707107

可以看到,我们传入了一个包含聚合函数的列表,输出结果是一个新的DataFrame对象,包括了每个组的均值和标准差。

多级分组

除了单一的分组列外,我们也可以根据多列进行分组,从而得到多级分组结果。如下是一个示例:

data = pd.DataFrame({'group1':['a', 'a', 'b', 'b', 'c', 'c'],
                     'group2':['x', 'y', 'x', 'y', 'x', 'y'],
                     'value1':[1, 2, 3, 4, 5, 6],
                     'value2':[2, 4, 6, 8, 10, 12]})
grouped = data.groupby(['group1', 'group2'])
result = grouped.mean()
print(result)

输出结果如下:

              value1  value2
group1 group2               
a      x         1.0     2.0
       y         2.0     4.0
b      x         3.0     6.0
       y         4.0     8.0
c      x         5.0    10.0
       y         6.0    12.0

可以看到,我们按照group1group2这两列进行了分组,得到了多级分组结果。

示例1:按地区分组,统计每个地区每年的销售总额

假设我们有一份数据记录了每个人在不同地区的销售金额和年份,数据如下:

名称 地区 年份 销售额
张三 北京 2019 10
李四 上海 2018 13
王五 北京 2019 22
马六 上海 2019 18
赵七 北京 2018 8
钱八 上海 2018 15

我们现在想要对数据进行分组,以地区为标准,统计每个地区每年的销售总额。可以按如下代码进行操作:

data = pd.DataFrame({'name':['张三', '李四', '王五', '马六', '赵七', '钱八'],
                     'region':['北京', '上海', '北京', '上海', '北京', '上海'],
                     'year':[2019, 2018, 2019, 2019, 2018, 2018],
                     'sales':[10, 13, 22, 18, 8, 15]})
grouped = data.groupby(['region', 'year'])
result = grouped['sales'].sum()
print(result)

输出结果为:

region  year
北京      2018     8
         2019    32
上海      2018    28
         2019    18
Name: sales, dtype: int64

可以发现,通过groupby()函数,我们按照地区和年份两个列进行了多级分组,然后对每个组的sales列进行了求和操作。

示例2:按月份分组,分别统计每天的最高温度和最低温度

假设我们有一份记录了某城市每天的最高温度和最低温度的数据,数据如下:

日期 最高温度 最低温度
2021-01-01 5 -3
2021-01-02 4 -1
2021-01-03 3 -2
2021-02-01 12 6
2021-02-02 10 5
2021-02-03 11 4

我们现在想要按月份分组,分别统计每天的最高温度和最低温度。可以按如下代码进行操作:

data = pd.DataFrame({'date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-02-01', '2021-02-02', '2021-02-03'],
                     'high_temperature':[5, 4, 3, 12, 10, 11],
                     'low_temperature':[-3, -1, -2, 6, 5, 4]})
data['month'] = pd.to_datetime(data['date']).dt.month # 添加月份列
grouped = data.groupby('month')
result = grouped.agg({'high_temperature': max, 'low_temperature': min})
print(result)

输出结果为:

       high_temperature  low_temperature
month                                    
1                      5               -3
2                     12                4

可以发现,通过添加month列并按照该列进行分组操作,我们得到了每个月的最高温度和最低温度的聚合结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas分组聚合详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Pandas 读写html

    Pandas 是一个常用的 Python 数据处理工具库,它具有很好的数据处理能力,同时还提供了方便的输入输出(I/O)函数,用于读写各种格式的数据。其中,读写 HTML 文件是一项非常常见的操作。接下来,本文将详细讲解如何使用 Pandas 读写 HTML 的完整攻略。 1. Pandas 读取 HTML 文件 Pandas 可以使用 read_html …

    python-answer 2023年3月27日
    00
  • pandas is in和not in的使用说明

    Pandasisin和Notin的使用说明 Pandasisin和Notin的作用 Pandasisin和Notin是用于过滤数据的两个常用方法,可以筛选数据集中符合某些条件的数据,可以用于数据清洗或处理中。 Pandasisin和Notin的语法 pandasisin函数的语法如下: DataFrame.column_name.isin(values_li…

    python 2023年5月14日
    00
  • python使用ctypes调用第三方库时出现undefined symbol错误详解

    下面是“python使用ctypes调用第三方库时出现undefined symbol错误详解”的完整攻略。 什么是undefined symbol错误 在使用python调用第三方库时,如果出现了undefined symbol的错误,通常意味着python无法找到所需的共享库文件(.so)。这种错误通常出现在以下情况: 调用的第三方库没有正确安装或者没有…

    python 2023年5月14日
    00
  • Pandas – 合并两个具有不同列的数据框架

    当我们需要整合不同数据源、不同数据集时,常常需要进行数据框架间的合并。在Pandas中,通过merge()函数可以较为方便地实现数据框架间的合并。在两个具有不同列的数据框架合并时,我们需要注意以下几个方面: 合并键:在两个数据框架合并的过程中,我们需要指定合并键。合并键可以是某一个或某几个相同的标识符,将数据框架按照这个标识符进行合并。在指定合并键时,需要注…

    python-answer 2023年3月27日
    00
  • python中Array和DataFrame相互转换的实例讲解

    下面是详细的攻略: Python中Array和DataFrame相互转换的实例讲解 在Python中,Array和DataFrame是常用的数据结构。有时候我们需要将这两种数据结构相互转换,以便更好地处理数据。本文将详细讲解如何实现Array和DataFrame之间的转换,并给出具体的示例说明。 一、将Array转换成DataFrame 首先来看将Array…

    python 2023年5月14日
    00
  • Pandas替换NaN值的方法实现

    Pandas中NaN值的处理 在实际的数据处理中,经常会遇到数据缺失的情况,这时候Pandas提供了一系列方法能够方便地处理缺失值,其中NaN值(即Not a Number)是其中的一种。NaN值一般表示数据缺失或者不可用。如果数据中存在NaN值,通常需要进行清洗和处理,以保证数据的准确性和可靠性。 Pandas替换NaN值的方法 Pandas提供了多种方法…

    python 2023年5月14日
    00
  • 如何在Python中计算指数型移动平均线

    在Python中计算指数型移动平均线的一种常用方法是使用pandas库中的ewm()函数。ewm()函数可以对DataFrame和Series类型的数据进行指数型移动平均线的计算。 具体步骤如下: 步骤1:导入需要的库和数据 首先需要导入需要的库,例如pandas库、numpy库等,并加载相关的数据,例如一个时间序列的数据。 import pandas as…

    python-answer 2023年3月27日
    00
  • elasticsearch索引的创建过程index create逻辑分析

    下面是关于elasticsearch索引的创建过程的完整攻略: 1. 创建 index Elasticsearch 索引的创建过程主要分为三个步骤:创建 index、配置 index、预热 index。其中,第一个步骤是最基础也最重要的步骤,我们可以通过以下REST API 请求来创建索引: PUT /my-index { "settings&qu…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部