📜  Python熊猫-GroupBy(1)

📅  最后修改于: 2023-12-03 15:19:34.355000             🧑  作者: Mango

Python熊猫-GroupBy

Python Pandas的GroupBy是数据分析中一个非常强大的工具,它可以让你按照自己的需求将数据拆分为多个组,并对每个组进行独立的数据分析、处理和计算。本文将为你介绍GroupBy的基本概念、使用方法和一些实际应用场景。

GroupBy的基本概念

GroupBy的核心概念是将数据按照某个列或多个列进行分组,这些列称为分组键。然后,对于每个分组,我们可以对分组后的数据进行聚合、过滤、转换和应用自定义函数等操作。

在实际应用中,我们通常使用DataFrame对象的groupby()方法来进行分组操作。以以下代码为例:

import pandas as pd

# 创建一个示例DataFrame
data = {'Animal': ['Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Cat', 'Dog', 'Dog'],
        'Name': ['Max', 'Runo', 'Lucy', 'Tom', 'Charlie', 'Roxy', 'Daisy', 'Buddy'],
        'Gender': ['Male', 'Female', 'Female', 'Male', 'Male', 'Female', 'Female', 'Male'],
        'Weight': [20, 10, 15, 12, 25, 8, 17, 21]}

df = pd.DataFrame(data)

# 按Animal列进行分组
grouped = df.groupby('Animal')

在上面的代码中,我们创建了一个示例的DataFrame对象df,并使用groupby()方法按Animal列进行了分组。然后,我们可以对分组后的数据进行聚合、过滤、转换和应用自定义函数等操作。

GroupBy的使用方法

聚合操作

聚合操作包括sum()、mean()、std()、var()等,用于对分组后的数据进行统计分析。以sum()方法为例:

# 计算分组后的数据各列的和
summed = grouped.sum()
print(summed)

输出结果如下:

       Weight
Animal       
Cat        30
Dog       122

这里,sum()方法对分组后的数据各列进行了求和计算,并返回了一个新的DataFrame对象summed,其中Animal列成为了索引列。

过滤操作

过滤操作用于筛选出符合某种条件的分组。以过滤出Weight列求和大于等于50的分组为例:

# 筛选出Weight列求和大于等于50的分组
filtered = grouped.filter(lambda x: x['Weight'].sum() >= 50)
print(filtered)

输出结果如下:

  Animal Name  Gender  Weight
0    Dog  Max    Male      20
2    Dog  Lucy  Female     15
4    Dog  Charlie  Male    25
6    Dog  Daisy  Female     17
7    Dog  Buddy  Male      21

filter()方法接受一个函数作为参数,这个函数的返回值必须是一个布尔类型。函数返回True的分组将被保留,返回False的分组将被过滤掉。

转换操作

转换操作用于对每个分组进行独立的变换。以将每个分组的Weight列值减去各自分组的平均值为例:

# 对各组的Weight列减去平均值
transformed = grouped.transform(lambda x: x - x.mean())
print(transformed)

输出结果如下:

   Weight
0     1.8
1   -1.5
2   -2.8
3   -0.5
4     1.2
5   -2.5
6    -4.2
7     1.5

这里,transform()方法接受一个函数作为参数,这个函数会被应用到每个分组中。然后,将函数返回的结果作为新的DataFrame对象进行返回。

应用自定义函数

应用自定义函数可以使用agg()方法,以将每个分组Weight列的最大值和最小值相加为例:

# 对Weight列的最大值和最小值相加
def func(x):
    return x['Weight'].max() + x['Weight'].min()

# 应用自定义函数
aggregated = grouped.agg(func)
print(aggregated)

输出结果如下:

       Weight
Animal       
Cat        22
Dog        46

agg()方法接受一个函数作为参数,这个函数将被应用到每个分组中。然后,将函数返回的结果作为新的DataFrame对象进行返回。

GroupBy的实际应用场景

分组统计

GroupBy常用于实现分组统计功能,可以通过GroupBy将数据按照某个维度进行切分,然后对每一组数据进行统计分析。例如,可以将人们的消费数据按月份进行分组,统计每个月的总消费金额、平均消费金额、最大消费金额等指标。

分组排序

GroupBy可以实现分组排序功能,例如,可以将某个DataFrame对象按照某一列进行分组,然后对每个分组中的数据按照另一列进行排序,得到排序后的DataFrame对象。

数据透视表

数据透视表是一种非常方便的数据分析工具,可以通过Pandas的pivot_table()方法实现。数据透视表可以对大量数据进行快速分析,帮助我们找出数据之间的关系和规律,以及发现数据中的异常情况。

总结

本文介绍了Python Pandas的GroupBy的基本概念、使用方法和一些实际应用场景。GroupBy是Pandas中一个非常强大的分组工具,可以协助程序员完成大量的数据分析和处理任务,帮助程序员更好地理解数据之间的关系和规律。