详解Pandas groupby分组操作

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技术站

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

相关文章

  • 如何使用Python中的Pandas检查一天是否是工作日

    首先,Pandas是Python中的一个非常强大的数据处理库,内置了很多各式各样的函数和方法。而检查一天是否是工作日的方法,就要用到Pandas中的工作日历处理函数。下面是详细的攻略步骤: 步骤1:导入Pandas库和相关模块 import pandas as pd from pandas.tseries.offsets import BDay Pandas…

    python-answer 2023年3月27日
    00
  • 如何从字符串列表中检查Pandas列是否有值

    要从字符串列表中检查Pandas列是否有值,可以参考以下步骤: 步骤1: 导入所需的库和数据 import pandas as pd # 创建Pandas数据集 data = {‘A’: [‘foo’, ‘bar’, ”], ‘B’: [”, ”, ‘baz’], ‘C’: [”, ‘qux’, ”]} df = pd.DataFrame(data…

    python-answer 2023年3月27日
    00
  • 在Pandas数据框架的特定位置插入一个指定的列

    插入指定的列到 Pandas 数据框架的特定位置通常需要借助以下两个方法:insert()和drop()。 先给出一个示例数据框: import pandas as pd df = pd.DataFrame({ ‘A’: [1, 2, 3, 4], ‘B’: [‘a’, ‘b’, ‘c’, ‘d’], }) 现在,我们想要在列 B 和列 A 之间插入一个名为…

    python-answer 2023年3月27日
    00
  • 使用NumPy函数创建Pandas系列

    下面我将为您介绍使用NumPy函数创建Pandas系列(Series)的详细攻略,包括步骤和示例。 步骤 导入pandas和numpy模块 在使用NumPy函数创建Pandas系列之前,需要导入pandas和numpy模块。您可以使用以下代码导入这两个模块: import pandas as pd import numpy as np 使用np.array(…

    python-answer 2023年3月27日
    00
  • 如何在Pandas数据框架中实现数据标准化

    数据标准化也被称为归一化,是将不同规格的数据转换为同一规格的过程。这个过程主要是针对那些特征数据范围比较大,或者数据值相差较大的情况,通过一些数学方法将其转化为0到1之间的值,用于建模分析。在Pandas数据框架中,我们可以使用sklearn库中的StandardScaler来进行数据标准化。下面将详细介绍如何实现。 准备数据 首先我们需要准备一份数据,这里…

    python-answer 2023年3月27日
    00
  • 如何在Python中把Sklearn数据集转换成Pandas数据框

    将sklearn数据集转换成pandas数据框的过程相对简单,可以按照以下步骤进行: 导入所需的库和数据集 from sklearn import datasets import pandas as pd 在此示例中,我们使用iris数据集。 iris = datasets.load_iris() 创建数据框 将用于创建数据框的数据分离出来,并建立一个列表。…

    python-answer 2023年3月27日
    00
  • pandas删除部分数据后重新生成索引的实现

    要实现pandas删除部分数据后重新生成索引,可以采用reset_index函数或者直接使用drop函数。 使用reset_index函数重新生成索引 在使用reset_index函数时,需要传递drop参数。其中,drop为True表示删除原来的索引,False表示不删除原来的索引,保留原来的索引作为一列。 import pandas as pd # 原始…

    python 2023年5月14日
    00
  • Pandas多个条件(AND,OR,NOT)中提取行

    下面是Pandas多个条件中提取行的攻略。 1. 选择多行数据 通常,我们可以使用loc或iloc来选择某一行或某些行的数据,如: df.loc[3] # 选择第3行数据 df.iloc[[0, 2]] # 选择第1行和第3行的数据 但是,如果我们需要选择多个条件下的行数据时,可以使用多个逻辑操作符(例如&, |, ~),并放置在括号中,比如: df…

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