详解Pandas groupby分组操作

yizhihongxing

groupby 是 pandas 中非常重要的操作之一,它是指将数据按照一定的条件分为若干组,对每组数据执行特定的操作,然后将结果汇总为新的 DataFrame 的过程。通常,groupby 操作包括以下三个步骤:

  1. 分割:按照一定的规则将数据分为若干组;
  2. 应用:对每组数据执行特定的操作,例如聚合、转换、过滤等;
  3. 合并:将执行操作后得到的结果合并为一个新的数据结构。

下面我们通过一些示例来详细介绍 groupby 的用法。

首先,我们创建一个包含人员信息的数据集:

import pandas as pd
import numpy as np

data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Frank', 'Grace', 'Henry', 'Ivan', 'Jack'],
        'Gender': ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'M', 'M'],
        'Age': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70],
        'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Beijing', 'Shanghai', 'Beijing', 'Shenzhen', 'Guangzhou', 'Shanghai'],
        'Salary': [5000, 8000, 6000, 7000, 9000, 5500, 7500, 6500, 7000, 10000]}
df = pd.DataFrame(data)
print(df)

输出结果如下:

      Name Gender  Age       City  Salary
0    Alice      F   25    Beijing    5000
1      Bob      M   30   Shanghai    8000
2  Charlie      M   35  Guangzhou    6000
3    David      M   40   Shenzhen    7000
4    Emily      F   45    Beijing    9000
5    Frank      M   50   Shanghai    5500
6    Grace      F   55    Beijing    7500
7    Henry      M   60   Shenzhen    6500
8     Ivan      M   65  Guangzhou    7000
9     Jack      M   70   Shanghai   10000

我们以此为例,对这组数据集进行groupby操作:

分组

对于 DataFrame,我们可以根据某一列或多列进行分组,例如按照城市进行分组:

grouped = df.groupby('City')
for name, group in grouped:
    print(name)
    print(group)

输出结果如下:

Beijing
    Name Gender  Age     City  Salary
0  Alice      F   25  Beijing    5000
4  Emily      F   45  Beijing    9000
6  Grace      F   55  Beijing    7500
Guangzhou
      Name Gender  Age       City  Salary
2  Charlie      M   35  Guangzhou    6000
8     Ivan      M   65  Guangzhou    700

应用

在对分组后的数据进行操作之前,我们可以先对分组对象进行查看,例如查看每个组的大小:

grouped = df.groupby('City')
print(grouped.size())

输出结果如下:

City
Beijing      3
Guangzhou    2
Shanghai     3
Shenzhen     2
dtype: int64

我们可以使用聚合函数对每个组进行计算,例如计算每个城市的平均工资:

python
Copy code
grouped = df.groupby('City')
print(grouped['Salary'].mean())
输出结果如下:

City
Beijing      7166.666667
Guangzhou    6500.000000
Shanghai     7833.333333
Shenzhen     6750.000000
Name: Salary, dtype: float64

如果我们需要对每个组都执行多个聚合操作,可以使用 agg 方法:

grouped = df.groupby('City')
print(grouped['Salary'].agg([np.mean, np.median, np.std]))

输出结果如下:


                   mean  median          std
City                                        
Beijing     7166.666667    7500  2218.089987
Guangzhou   6500.000000    6500   707.106781
Shanghai    7833.333333    8000  2182.303656
Shenzhen    6750.000000    6750   353.553391

除了常用的聚合函数外,pandas 还提供了一些方便的函数,例如 size、first、last、nth 等。例如,我们可以使用 size 函数计算每个城市的人数:

grouped = df.groupby('City')
print(grouped.size())

输出结果如下:

City
Beijing      3
Guangzhou    2
Shanghai     3
Shenzhen     2
dtype: int64

合并

在对每个组进行操作后,我们可以使用 concat 或 merge 方法将结果合并为一个新的数据结构。例如,我们可以先计算每个城市的平均工资和人数,然后将它们合并为一个新的数据结构:

grouped = df.groupby('City')
result = pd.concat([grouped['Salary'].mean(), grouped.size()], axis=1)
result.columns = ['mean_salary', 'count']
print(result)

输出结果如下:


           mean_salary  count
City                         
Beijing    7166.666667      3
Guangzhou  6500.000000      2
Shanghai   7833.333333      3
Shenzhen   6750.000000      2

groupby 是 pandas 中非常重要的操作之一,它可以实现分组、聚合和合并等功能。熟练掌握 groupby 操作可以大大提高数据分析的效率。

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

(1)
上一篇 2023年3月5日
下一篇 2023年3月5日

相关文章

  • Python中的应急表

    Python中的应急表实际上是指异常处理机制中的异常类型和对应的处理方式的一张表格。在Python中,当程序执行过程中出现错误时,会抛出异常,并且根据异常类型的不同,我们需要采取不同的处理方式来解决问题。而对于Python开发者而言,了解这些异常类型及其含义是非常重要的。 下面是Python中常见的几种异常类型及其含义: 异常类型 含义 AssertionE…

    python-answer 2023年3月27日
    00
  • 如何在Pandas中把分类变量转换为数字变量

    在Pandas中将分类变量转换为数字变量需要使用pandas.Categorical和pandas.factorize方法。 具体步骤如下: 将分类变量转换为Categorical数据类型 df[‘category_column’] = pd.Categorical(df[‘category_column’]) 使用factorize()方法将分类变量转换为…

    python-answer 2023年3月27日
    00
  • 重命名Pandas中的特定列

    重命名Pandas DataFrame中的特定列可以使用rename()方法。下面是一个完整的攻略步骤。 步骤1:导入必要的库和读取数据 import pandas as pd # 读取数据 df = pd.read_csv(‘data.csv’) 步骤2:查看数据集和列名 # 打印前五行 print(df.head()) # 打印列名 print(df.c…

    python-answer 2023年3月27日
    00
  • Python中pandas dataframe删除一行或一列:drop函数详解

    当我们使用pandas库中的DataFrame数据结构进行数据分析时,经常需要删除某些行或列来清洗数据或者简化操作。在Python中,可以使用drop函数来删除DataFrame中的行或列。 drop函数的语法和参数 删除行的操作: df.drop(labels=None, axis=0, index=None, columns=None, level=No…

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

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

    python 2023年5月14日
    00
  • python基础pandas的drop()用法示例详解

    Python基础Pandas的drop()用法示例详解 简介 在数据分析过程中,通常需要进行数据处理,其中删除不需要的行或列是常见的操作。Pandas库是Python数据分析的重要工具之一,提供了丰富的数据处理方法。其中,drop()是Pandas的重要方法之一,用户可以使用该函数来删除DataFrame或Series中不需要的行或列。 drop方法的语法 …

    python 2023年5月14日
    00
  • 在Pandas数据框架中对数值进行四舍五入的方法

    在Pandas数据框架中对数值进行四舍五入可以使用round()方法。该方法用于对数据框架中数值进行准确的四舍五入。 例如,我们有一个如下的数据框架: import pandas as pd # 创建一个数据框架 df = pd.DataFrame({ ‘名称’: [‘苹果’, ‘橘子’, ‘香蕉’, ‘菠萝’], ‘价格’: [3.14159, 1.234…

    python-answer 2023年3月27日
    00
  • 如何在Pandas中改变索引值

    在Pandas中改变索引值的方式有很多种,下面是一些常见的方法: 1. 使用set_index()函数 set_index()函数可以将DataFrame中的一列或多列设置为索引,下面是一个例子: import pandas as pd # 创建一个DataFrame df = pd.DataFrame({‘a’: [1, 2, 3], ‘b’: [4, 5…

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