pandas之分组groupby()的使用整理与总结

yizhihongxing

pandas之分组groupby()的使用整理与总结

一、概述

在数据分析和处理过程中,通常需要对大规模数据进行分组、聚合等操作。在Pandas里,就有着一种非常强大的操作工具——groupby()函数,可以支持类似于SQL的聚合操作,非常方便实用。本篇攻略将对groupby()的使用做一个整理与总结。

二、一些基础知识

DataFrame和Series

在Pandas里,DataFrame和Series是两个最基本和最重要的数据结构,其中:

  1. DataFrame是一个二维的数据结构,每一列都是一个Series。所以我们可以把DataFrame看做是一个由Series组成的字典。

  2. Series是一维的数据结构,类似于一个数组。

分组和聚合

分组和聚合是Pandas里非常常用的一种操作,可以将数据按照某一列或多列进行分组,并对部分或全部列进行聚合操作,通常包括均值、总和、个数、最大值、最小值等等。

以以下数据为例,说明一下分组和聚合的概念(示例1):

df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
                   'B': ['one', 'one', 'two', 'two', 'two', 'one', 'two', 'one'],
                   'C': [1, 2, 3, 4, 5, 6, 7, 8],
                   'D': [10, 20, 30, 40, 50, 60, 70, 80]})
print(df)

输出:

     A    B  C   D
0  foo  one  1  10
1  bar  one  2  20
2  foo  two  3  30
3  bar  two  4  40
4  foo  two  5  50
5  bar  one  6  60
6  foo  two  7  70
7  foo  one  8  80

在这个数据中,列A和列B是分类特征,列C和列D是数值特征。

三、使用groupby()进行分组和聚合

1. groupby()的基本用法

1.1 按照一列进行分组,并对另一列进行聚合

df.groupby(by=['A'])['D'].mean()

输出:

A
bar    40.000000
foo    44.166667
Name: D, dtype: float64

"groupby(by=['A'])['D']"表示按照列A进行分组,然后对列D进行聚合。mean()表示求均值。

1.2 按照两列进行分组,并对另一列进行聚合

df.groupby(by=['A', 'B'])['C'].mean()

输出:

A    B  
bar  one    4.0
     two    4.0
foo  one    4.5
     two    5.0
Name: C, dtype: float64

"groupby(by=['A', 'B'])['C']"表示按照列A和B进行分组,然后对列C进行聚合。mean()表示求均值。

2. 分组并同时进行多列聚合

df.groupby(by=['A'])['C', 'D'].mean()

输出:

        C     D
A             
bar  4.00  40.0
foo  4.25  40.0

"groupby(by=['A'])['C', 'D']"表示按照列A进行分组,然后对列C和D进行聚合。mean()表示求均值。

3. 分组并进行多种聚合

df.groupby(by=['A'])[['C', 'D']].agg([np.min, np.max, np.mean, np.median, np.sum])

输出:

      C                           D                               
   amin amax      mean median sum amin amax       mean median  sum
A                                                                 
bar    2    6  4.000000    4.0  12   20   60  40.000000   40.0  120
foo    1    8  4.250000    4.0  17   10   80  40.000000   40.0  320

"groupby(by=['A'])[['C', 'D']]"表示按照列A进行分组,然后对列C和D进行聚合。agg([np.min, np.max, np.mean, np.median, np.sum])表示对不同的列进行不同的聚合操作。

四、更多操作

1. 对每个分组进行操作

通过groupby()函数分组后,可以使用apply()函数对每个分组进行操作。例如,对每个分组进行排序:

df.groupby(by=['A']).apply(lambda x: x.sort_values('C'))

输出:

         A    B  C   D
A                     
bar 1  bar  one  2  20
    3  bar  two  4  40
    0  foo  one  1  10
    5  bar  one  6  60
foo 2  foo  two  3  30
    4  foo  two  5  50
    6  foo  two  7  70
    7  foo  one  8  80

2. 分组排序

df.groupby(by=['A'])[['C', 'D']].apply(lambda x: x.sort_values('C'))

输出:

         C   D
A             
bar 1   2  20
    3   4  40
    5   6  60
    0   1  10
foo 2   3  30
    4   5  50
    6   7  70
    7   8  80

3. 分组过滤

在分组后,可以通过filter()函数进行过滤。例如,筛选出每个分组中C列的和大于10的分组:

df.groupby(by=['A']).filter(lambda x: x.C.sum() > 10)

输出:

     A    B  C   D
0  foo  one  1  10
1  bar  one  2  20
2  foo  two  3  30
3  bar  two  4  40
4  foo  two  5  50
5  bar  one  6  60
6  foo  two  7  70
7  foo  one  8  80

4. 统计属性

grouped = df.groupby(by=['A'])
grouped.groups

输出:

{'bar': [1, 3, 5], 'foo': [0, 2, 4, 6, 7]}
grouped.get_group('bar')

输出:

     A    B  C   D
1  bar  one  2  20
3  bar  two  4  40
5  bar  one  6  60

至此,我们已经介绍了groupby()的基本用法以及一些常见的应用场景,在实际应用中,可以根据不同的数据需求,进行相应的操作。

五、总结

本篇攻略介绍了groupby()的使用方法和一些常见的应用场景,例如按照一列或多列进行分组并对另一列进行聚合,同时进行多列聚合,多种聚合,对每个分组进行操作等。除了基本用法外,还介绍了apply()函数、filter()函数、统计属性等操作。熟练掌握groupby()可以为数据分析和处理提供非常大的帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas之分组groupby()的使用整理与总结 - Python技术站

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

相关文章

  • 根据条件选择pandas DataFrame中的行

    根据条件选择Pandas DataFrame中的行可以使用DataFrame的loc[]、iloc[]和ix[]三种方法。其中,ix[]已经被废弃,因此推荐使用loc[]和iloc[]方法。 一、通过loc[]方法根据条件选择行 loc[]方法通过行标签(label)选择行。可以使用以下方式来选择行: 1.使用一组条件选择行 import pandas as…

    python-answer 2023年3月27日
    00
  • Python+seaborn实现联合分布图的绘制

    我整理一下关于“Python+seaborn实现联合分布图的绘制”的完整攻略: 简介 Seaborn是Python中常用的数据可视化库之一,它提供了许多高层次的API,用于绘制各种统计图表,包括直方图、核密度估计图、散点图、热力图、箱线图等。本文将着重介绍Seaborn中的一种可视化图表——联合分布图(Jointplot),这种图表可以同时可视化两个变量之间…

    python 2023年6月13日
    00
  • Python实现读取HTML表格 pd.read_html()

    当我们需要从HTML页面中读取表格数据进行进一步处理和分析时,Python中pd.read_html()函数是一个非常方便实用的方法。 1. pd.read_html()函数简介 pd.read_html()函数位于pandas模块中,可以直接从HTML页面中读取表格内容,并返回一个DataFrame类型的数据结构,可以直接用于进一步的数据处理和分析。 2.…

    python 2023年5月14日
    00
  • pandas 数据实现行间计算的方法

    “pandas数据实现行间计算的方法”指的是如何使用pandas进行数据计算,其中涉及到行与行之间的计算。以下是详细的攻略: 1. 加载数据 首先,我们需要使用pandas的读取数据函数,将数据加载到我们的代码中。在此我将以csv文件为例进行说明,具体代码如下: import pandas as pd # 读取csv文件 df = pd.read_csv(&…

    python 2023年5月14日
    00
  • 在Pandas数据框架中选择具有最大和最小值的行

    在 Pandas 数据框架中选择具有最大和最小值的行有多种方法,下面将详细介绍其中两种方法: 使用 loc 方法结合 idxmin 和 idxmax 方法 import pandas as pd import numpy as np # 创建预置数据 data = {‘A’: [1, 2, 3], ‘B’: [4, 5, 6], ‘C’: [7, 8, 9]…

    python-answer 2023年3月27日
    00
  • Python 将逐点数据转换成OHLC(开盘-高点-收盘)数据

    Python可以通过一些简单的代码将逐点数据转换成OHLC(开盘-高点-收盘)格式的数据。 OHLC数据是一种常用的股票数据表示方法,即用一组数据来描述开盘价(open)、最高价(high)、最低价(low)、收盘价(close)和交易量(volume)等信息。OHLC数据通常用于股票交易和期货交易等金融领域的数据分析和建模。 下面是一个简单的Python代…

    python-answer 2023年3月27日
    00
  • 如何在Python中使用Pandas绘制安德鲁斯曲线

    下面是详细的讲解如何在Python中使用Pandas绘制安德鲁斯曲线的完整攻略。 一、安德鲁斯曲线介绍安德鲁斯曲线是一种用于可视化数据集多元变量分布的方法,具体来说就是将多元变量的值用特定的方式映射到二维平面上。在安德鲁斯曲线中,每个变量都被表示为一个三角函数(以下简称sin/cos),通过将每个变量的sin/cos系数线性组合得到一个新的函数,最终将这个函…

    python-answer 2023年3月27日
    00
  • Pandas中join和merge的区别是什么

    Pandas中join和merge都是用来将两个或多个数据集按照某些列或索引进行合并的函数。它们的主要区别如下: join是通过索引进行合并,而merge是通过列进行合并。 join只能用于两个数据集的合并,而merge可以合并两个或多个数据集。 join默认情况下是按照左连接进行合并,而merge默认情况下是按照内连接进行合并。 下面通过具体例子来演示jo…

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