pandas groupby sum

pandas groupby sum

pandas groupby sum

1. 引言

在数据分析和数据处理的过程中,我们经常需要对数据进行分组求和的操作。这种操作可以帮助我们统计数据的总和,并且可以根据不同的分组条件进行求和。在Python中,pandas是一个非常强大的数据处理库,提供了丰富的方法和函数来处理数据。其中,groupbysum是两个非常常用的函数,可以实现对数据进行分组求和的功能。本文将详细介绍pandas库中的groupbysum的用法,并通过示例代码来演示其具体的使用方法。

2. pandas简介

pandas是一个基于NumPy的库,提供了高性能,易用的数据结构和数据分析工具。pandas主要有两种数据结构:Series和DataFrame。Series是一种一维数组,类似于Excel的一列数据;DataFrame是一个二维的表格型数据结构,类似于Excel中的一个表格。pandas提供了大量的函数和方法,方便我们对数据进行操作和分析。

3. groupby函数

groupby函数是pandas中用来进行分组操作的函数。它可以将数据按照某个或某几个条件进行分组,然后对每个分组进行相应的处理。groupby函数的基本用法如下:

grouped = df.groupby(key)
Python

其中,key表示分组的依据,可以是一个列名(字符串),也可以是一个列名的列表。groupby函数将按照key的值对数据进行分组,并返回一个GroupBy对象。

3.1 groupby对象的常用属性和方法

GroupBy对象是一个中间结果,它提供了多个常用的属性和方法,用于对数据进行分组后的操作。

3.1.1 groups属性

groups属性返回一个字典,其中键是分组名称,值是分组的行索引。我们可以通过遍历字典的方式查看分组的信息。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
print(grouped.groups)
Python

输出:

{'John': [2], 'Nick': [1, 4], 'Tom': [0, 3]}
Python

可以看到,groups属性返回了一个字典,其中键是分组的名称,值是分组的行索引。这里按照姓名进行了分组,所以分组的名称就是姓名。

3.1.2 get_group方法

get_group方法可以根据分组的名称获取对应的分组数据。该方法接受一个参数,即分组的名称。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
group = grouped.get_group('Tom')
print(group)
Python

输出:

  Name  Subject  Score
0  Tom     Math     80
3  Tom  English     85
Python

可以看到,通过get_group方法,我们可以获取到名称为’Tom’的分组数据。

3.1.3 size方法

size方法返回一个Series,其中的每个元素表示对应分组的大小(即分组中的行数)。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
group_sizes = grouped.size()
print(group_sizes)
Python

输出:

Name
John    1
Nick    2
Tom     2
dtype: int64
Python

可以看到,通过size方法,我们可以获取到每个分组的大小。

3.1.4 agg方法和apply方法

agg方法用于对分组后的数据进行聚合操作,常用的聚合函数包括sum、mean、max、min等。agg方法接受一个或多个聚合函数作为参数。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
result = grouped['Score'].agg(['sum', 'mean', 'max', 'min'])
print(result)
Python

输出:

      sum  mean  max  min
Name                     
John   90  90.0   90   90
Nick  145  72.5   75   70
Tom   165  82.5   85   80
Python

可以看到,通过agg方法,我们可以对分组后的数据进行求和、均值、最大值和最小值等聚合操作。

apply方法与agg方法类似,用于对分组后的数据应用自定义的函数。apply方法接受一个函数作为参数,并将该函数应用于每个分组。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
def get_max_score(group):
    return group['Score'].max()

result = grouped.apply(get_max_score)
print(result)
Python

输出:

Name
John    90
Nick    75
Tom     85
dtype: int64
Python

可以看到,通过apply方法,我们可以对每个分组应用自定义的函数,并获得相应的结果。

3.2 多重分组

除了可以按照单个列进行分组外,groupby函数还支持按照多个列进行分组。多重分组的结果是一个多级索引的GroupBy对象,可以通过多层次的索引来获取分组数据。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby(['Name', 'Subject'])
print(grouped.groups)
Python

输出:

{('John', 'Math'): [2], ('Nick', 'English'): [4], ('Nick', 'Math'): [1], ('Tom', 'English'): [3], ('Tom', 'Math'): [0]}
Python

可以看到,通过多级索引可以方便地查看多重分组的结果。

4. sum函数

sum函数用于对数据进行求和操作。在pandas中,我们可以将sum函数应用于GroupBy对象,实现对分组后的数据进行求和。

示例代码:

import pandas as pd

data = {'Name': ['Tom', 'Nick', 'John', 'Tom', 'Nick'],
        'Subject': ['Math', 'Math', 'Math', 'English', 'English'],
        'Score': [80, 75, 90, 85, 70]}
df = pd.DataFrame(data)

grouped = df.groupby('Name')
result = grouped['Score'].sum()
print(result)
Python

输出:

Name
John     90
Nick    145
Tom     165
Name: Score, dtype: int64
Python

可以看到,通过sum函数,我们可以对分组后的数据进行求和操作,并得到每个分组的求和结果。

5. 总结

本文详细介绍了pandas库中的groupbysum的用法,并通过示例代码演示了它们的具体使用方法。groupby函数可以实现对数据的分组操作,可以按照单个列或者多个列进行分组,返回一个GroupBy对象。GroupBy对象提供了多个常用的属性和方法,如sizeaggapply等,方便我们对分组后的数据进行统计和处理。sum函数可以应用于GroupBy对象,实现对分组后的数据进行求和操作,得到每个分组的求和结果。

pandas的groupbysum是数据分析和数据处理中非常常用的函数和方法,熟练掌握它们的用法能够提高数据处理的效率和准确性。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册