pandas分组聚合详解

yizhihongxing

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数据框架导出到Excel文件中

    导出Pandas数据框架到Excel文件通常是分析数据的重要一步。下面是完整的攻略: 安装必要的库 在导出数据到Excel之前,需要先安装必要的库,推荐使用pandas和openpyxl: pip install pandas openpyxl 如果因为网络问题安装失败,可以考虑换用镜像源,例如: pip install -i https://pypi.tu…

    python-answer 2023年3月27日
    00
  • 将Pandas交叉表转换为堆叠数据框架

    将Pandas交叉表转换为堆叠数据框架,可以使用stack函数。下面是详细的攻略: 步骤一:加载数据和创建交叉表 首先,我们需要加载数据和创建交叉表。下面是一个例子,我们加载了一个csv文件,并创建一个基于两个分类变量的交叉表: import pandas as pd # 加载数据 data = pd.read_csv("example.csv&q…

    python-answer 2023年3月27日
    00
  • python 线性回归分析模型检验标准–拟合优度详解

    python 线性回归分析模型检验标准–拟合优度详解 线性回归模型是回归分析中广泛使用的一种模型。对于线性回归模型,通常需要对其进行检验来验证其可靠性。其中一项重要的检验指标是拟合优度,本文将详细讲解拟合优度的计算和含义。 一、拟合优度 拟合优度(Goodness of Fit)是一种衡量模型拟合程度的指标,通常用 $R^2$ 表示。$R^2$ 的值介于 …

    python 2023年6月13日
    00
  • Python 数据处理库 pandas 入门教程基本操作

    Python数据处理库pandas入门教程基本操作 简介 pandas是Python中一种很流行的数据处理库,既拥有NumPy数组的高性能计算特性,又具备Excel表格和SQL数据库的灵活性与可操作性,是进行数据清洗、分析、转换等操作的必备利器。本文将通过一些基本操作的实例来帮助读者入门pandas。 安装 在开始使用pandas之前应该先安装它。可以通过p…

    python 2023年5月14日
    00
  • 如何用Pandas对excel中的日期进行排序

    下面是使用Pandas对Excel中的日期进行排序的完整攻略,包括以下步骤: 步骤1:导入所需的Python库 我们需要使用 Pandas 这个数据分析库来处理 Excel 文件,另外还需要一个用于数据可视化的 Matplotlib 库。在使用这两个库之前,需要先在 Python 里面导入这两个库。 import pandas as pd import ma…

    python-answer 2023年3月27日
    00
  • 从一个给定的Pandas数据框架的列名中获取列索引

    获取Pandas数据框架的列索引,可以通过以下步骤: 1. 观察数据框架的列名 首先,我们需要观察数据框架的列名,可以通过以下代码获取: import pandas as pd # 创建数据框架 df = pd.DataFrame({‘A’: [1, 2, 3], ‘B’: [4, 5, 6], ‘C’: [7, 8, 9]}) # 输出列名 print(d…

    python-answer 2023年3月27日
    00
  • 解决编码问题:UnicodeDecodeError: ‘utf-8’ codec can’t decod

    当我们在处理文本数据时,经常会遇到编码问题。其中一个常见的问题是“UnicodeDecodeError: ‘utf-8’ codec can’t decode”的错误。这个错误会提示我们在将字节码解码为Unicode字符串时出现问题。下面是解决这个问题的完整攻略: 确认文件编码 在使用Python处理文本文件时,首先需要确认文件的编码格式。如果文件的编码格式…

    python 2023年5月14日
    00
  • 在Pandas DataFrame中基于现有的列创建一个新的列

    在Pandas DataFrame中基于现有的列创建一个新的列,可以通过多种方式实现,常见的方法包括: 使用apply函数 使用assign函数 直接通过索引创建新列 下面分别介绍三种方法的详细步骤和实例说明。 使用apply函数 apply函数可以对DataFrame的某一列进行遍历和操作,具体步骤如下: 定义一个操作函数。 使用apply函数将操作函数应…

    python-answer 2023年3月27日
    00
合作推广
合作推广
分享本页
返回顶部