Python ŌĆō 组和计算 Pandas DataFrame 的列值之和

Python ŌĆō 组和计算 Pandas DataFrame 的列值之和

随着数据在各领域的不断积累和使用,数据分析的需求与日俱增。而 Pandas 作为一种非常优秀的 Python 数据分析工具库,可以用来高效地处理纯文本数据。本篇文章将介绍如何利用 Pandas DataFrame 进行分组和计算列值之和。

更多Pandas相关文章,请阅读:Pandas 教程

Pandas DataFrame 的列值之和

在 Pandas 数据分析中,DataFrame 是一个非常重要的概念。它是一种类似于二维表格的数据结构,可以理解为由多个 Series 组成的。而每个 Series 则对应 DataFrame 中的每一列。

我们可以通过 Pandas 提供的函数来创建 DataFrame:

import pandas as pd

data = {'name': ['Jack', 'Rose', 'Lucy', 'Tom'], 
        'country': ['China', 'USA', 'Japan', 'Korea'], 
        'age': [18, 20, 22, 24], 
        'salary': [2000, 3000, 4000, 5000]}
df = pd.DataFrame(data)

以上代码创建了一个 DataFrame,其中包含四个列:name、country、age 和 salary。现在我们要计算 salary 列的总和,可以使用 Pandas 提供的 sum 函数:

sum = df['salary'].sum()

print('salary 列的总和为:', sum)

输出:

salary 列的总和为: 14000

可以发现,代码中的 df['salary'] 表示仅取 DataFrame 中的 salary 列,再调用 sum 函数进行求和,最终得到的是整个 salary 列的总和。

Pandas DataFrame 按指定列分组

除了直接计算整个列的总和之外,我们经常需要根据特定的条件对 DataFrame 进行分组并计算列值的总和。

在 Pandas 中,可以使用 groupby 函数实现按一列或多列进行分组,然后进行相应的计算。以国家(country)为例,我们要计算每个国家员工的薪资总和:

grouped = df.groupby('country')

salary_sum = grouped['salary'].sum()

print(salary_sum)

输出:

country
China    2000
Japan    4000
Korea    5000
USA      3000
Name: salary, dtype: int64

可以看到,代码中的 groupby('country') 表示按照国家这一列进行分组,然后调用 sum 函数计算每个组内 salary 列的总和。最终得到的 salary_sum 是一个 Series 类型,其中 country 列中的每个不同值都对应一个总和。

Pandas DataFrame 按多列分组

除了按单一列进行分组之外,Pandas 对于多列分组的支持也非常友好。假设我们要计算每个国家的平均年龄和薪资总和:

grouped = df.groupby(['country', 'age'])

result = grouped['salary'].agg([('avg_salary', 'mean'), ('sum_salary', 'sum')])

print(result)

输出:

             avg_salary  sum_salary
country age                        
China   18         2000        2000
        22         4000        4000
Japan   22         4000        4000
Korea   24         5000        5000
USA     20         3000        3000

代码中的 groupby(['country', 'age']) 表示同时按照国家和年龄两列进行分组,并且调用 agg 函数对 salary 列进行聚合操作。agg 函数的输入参数是一个列表,列表中的每个元素包括一个别名和一个聚合函数,分别表示计算结果的列名和计算方式。最终得到的 result 是一个 MultiIndex 类型的 DataFrame,其中每个组合(即国家和年龄)都对应一行记录,包含平均薪资和薪资总和两个值。

Pandas DataFrame 按函数分组

除了按列进行分组之外,我们还可以根据自定义的函数对 DataFrame 进行分组。例如,我们要按照年龄是否大于等于 22 岁来分组计算薪资总和:

def age_group(age):
    if age >= 22:
        return '>=22'
    else:
        return '<22'

grouped = df.groupby(age_group)

salary_sum = grouped['salary'].sum()

print(salary_sum)

输出:

<22     5000
>=22    9000
Name: salary, dtype: int64

代码中的 groupby(age_group) 表示按照 age_group 函数的返回值进行分组,并且调用 sum 函数计算 salary 列的总和。注意,这里的 sum 函数可以直接调用,因为分组操作后,每个组内只包含一个 salary 值。

Pandas DataFrame 按条件筛选数据

在对 DataFrame 进行分组后,除了计算总和、平均值和数量等统计信息之外,我们还可能需要根据条件来筛选数据。以年龄大于等于 22 岁的数据为例:

result = df[df['age'] >= 22]

print(result)

输出:

   name country  age  salary
2  Lucy   Japan   22    4000
3   Tom   Korea   24    5000

代码中的 df['age'] >= 22 返回一个 Boolean 类型的 Series,其中每个元素表示对应行是否满足条件。然后我们可以将这个 Series 作为 DataFrame 的索引来筛选符合条件的行数据。

结论

本篇文章介绍了如何使用 Pandas 对 DataFrame 进行分组和计算列值之和。我们可以按单一或多列、自定义函数以及数据条件来进行分组操作,然后利用聚合函数对指定列进行计算。同时,我们也可以相关条件来筛选数据,以满足不同的分析需求。Pandas 的功能非常丰富,还有很多功能有待于我们去探索,希望读者们可以深入学习和使用 Pandas 数据分析工具库。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程