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

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中进行字符串操作是一个经常用到的操作,下面是进行这个操作的完整攻略。 1. 引入相关库和数据 首先我们需要引入所需要的库和数据,如下所示: import pandas as pd data = {‘name’: [‘张三’, ‘李四’, ‘王五’], ‘age’: [20, 22, 25], ’email’: [‘zhang…

    python-answer 2023年3月27日
    00
  • 一文搞懂Python中Pandas数据合并

    我来为你详细讲解一下Python中Pandas数据合并的攻略。 1. 简介 Pandas是一个Python第三方库,提供了一种高效、便捷的数据处理工具,常用于数据清洗、分析和可视化。数据合并是数据处理过程中的常见操作之一,Pandas提供了多种数据合并手段,具体如下: concat:可以将两个或多个DataFrame对象进行简单的连接操作; merge:可以…

    python 2023年5月14日
    00
  • Python对数据进行插值和下采样的方法

    Python中常用的数据插值和下采样方法有很多,比较常用的有线性插值、三次样条插值和下采样方法有平均下采样和最大池化下采样。下面将详细讲解其中的几种方法。 线性插值 在Python中可以使用scipy库中的interp方法实现线性插值。具体使用方法如下: from scipy.interpolate import interp1d import numpy …

    python 2023年6月13日
    00
  • Python中的Pandas.describe_option()函数

    在Python的Pandas库中,可以使用describe_option()函数来查看和修改Pandas中的一些全局选项。 函数的语法如下: pandas.describe_option(pat=None, display=None) 其中,pat参数可以是一个字符串或正则表达式,用于过滤选项名称;display参数可以是一个布尔值,用于确定是否将所有选项输…

    python-answer 2023年3月27日
    00
  • Python 从一个等长列表的dict中创建一个Pandas数据框架

    首先,我们需要导入 Pandas 库,可以使用以下代码: import pandas as pd 之后,我们需要创建一个等长列表的字典,以便将其转换为 Pandas 数据框架。例如,我们可以创建以下字典: dict = {‘name’: [‘Alice’, ‘Bob’, ‘Charlie’, ‘David’], ‘age’: [25, 30, 35, 40]…

    python-answer 2023年3月27日
    00
  • 使用BeautifulSoup将XML结构转换为DataFrame

    使用BeautifulSoup将XML结构转换为DataFrame的步骤如下: 导入BeautifulSoup和pandas库 from bs4 import BeautifulSoup import pandas as pd 载入XML文件并解析成BeautifulSoup对象 with open(‘file.xml’, ‘r’) as f: xml = …

    python-answer 2023年3月27日
    00
  • 浅谈Pandas Series 和 Numpy array中的相同点

    针对“浅谈Pandas Series 和 Numpy array中的相同点”的问题,我可以给出如下完整攻略。 简介 Pandas是一款数据处理的Python库,其包含了丰富的数据结构和数据操作工具。其中Series是Pandas的一种基础数据结构,是一种带标签的一维数组。而Numpy是另一款优秀的Python数值计算库,也有着非常强大的矩阵和数组处理能力。在…

    python 2023年6月13日
    00
  • Pandas 连接合并函数merge()详解

    Pandas连接合并函数merge()详解 在pandas中,merge函数用于将两个数据集按照某些规则合并为一个数据集。本文将详细讲解merge函数的用法和示例。 merge函数的分类 merge有四种连接方式: 内连接(inner join) 左连接(left join) 右连接(right join) 外连接(outer join) merge函数的基…

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