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 数据分析工具库。