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标记删除重复记录的方法

    Pandas中标记删除重复记录的方法主要是通过drop_duplicates函数来实现,该函数可以去除DataFrame对象中的重复行,有以下几个常用参数: subset: 指定需要检查重复值的列。 keep: 取值可为 first, last, False,表示在去除重复值时保留哪一个(第一个,最后一个或全删除)。 inplace: 取值可为 True 或…

    python 2023年6月13日
    00
  • 如何在Python中打印没有索引的Dataframe

    为了打印没有索引的Dataframe,我们需要首先禁用Dataframe的索引列。可以通过在Dataframe上使用reset_index方法将索引列重置为默认的数字索引,并将其存储在一个新变量中,如下所示: import pandas as pd # 创建没有索引的Dataframe df = pd.DataFrame({‘A’: [1, 2, 3], ‘…

    python-answer 2023年3月27日
    00
  • Pandas Dataframe.to_numpy() – 将数据框架转换为Numpy数组

    Pandas是一个基于Numpy的库,用于数据分析和处理。Pandas DataFrame是一种二维的表格数据结构,类似于SQL表或Excel的电子表格。DataFrame.to_numpy()是一个用于将数据框架转换为Numpy数组的方法。它返回一个包含数据框架值的二维ndarray。在本次攻略中,我们将详细讲解Pandas DataFrame.to_nu…

    python-answer 2023年3月27日
    00
  • Python中的Pandas.get_option()函数

    Pandas.get_option()函数是一个用于获取Pandas选项卡的函数,它允许用户查询和更改Pandas库的设置选项。 Pandas中有数百个设置选项,它们定义了Pandas如何处理数据的细节。使用get_option函数可以查询当前设置选项的值。 函数的语法如下: pandas.get_option(pat, display=None) 参数说明…

    python-answer 2023年3月27日
    00
  • Python Pandas读取csv/tsv文件(read_csv,read_table)的区别

    当使用Python Pandas库读取文本文件时,可以使用read_csv()和read_table()两种函数。它们的区别在于默认使用的分隔符不同。 read_csv()函数默认使用逗号作为分隔符,可以读取以.csv格式保存的文件。而read_table()函数默认使用制表符作为分隔符,可以读取以.tsv格式保存的文件。 另外,这两个函数还可以通过参数进行…

    python 2023年5月14日
    00
  • pandas抽取行列数据的几种方法

    当我们使用pandas模块处理数据时,我们常常需要对数据进行抽取、筛选等操作。下面我将为大家介绍一些抽取行列数据的常用方法。 1. 通过标签名抽取列数据 我们可以使用[]和列的标签名来抽取列数据。例如: import pandas as pd data = {‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’, ‘Ella…

    python 2023年5月14日
    00
  • pandas string转dataframe的方法

    下面我将详细讲解pandas中string转dataframe的方法。 首先需要了解的是pandas中的read_csv函数。该函数可以读取csv文件并将其转换为dataframe格式。在转换的过程中,可以通过指定参数来设置列名、索引等信息。而我们要将string转换为dataframe,则可以利用read_csv函数的一个特殊参数——io。当这个参数被传入…

    python 2023年5月14日
    00
  • JPA merge联合唯一索引无效问题解决方案

    关于JPA的merge方法和联合唯一索引无效问题,这是解决方案的完整攻略: 背景 在JPA的实体类中,我们经常会为表添加联合唯一索引来保存不允许重复的数据。比如下面这个例子: @Entity @Table(name = "tb_user", schema = "public", uniqueConstraints = …

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