【Pandas】深入解析pandas中的统计汇总函数`sum()`

【Pandas】深入解析Pandas中的统计汇总函数sum()

在这里插入图片描述

一、引言

在数据处理和分析的世界里,求和(sum())是一个基础且重要的操作。Pandas库作为Python数据分析的利器,提供了功能强大的sum()函数,用于计算DataFrame或Series对象中所有元素或指定轴上的和。本文将深入解析Pandas中的sum()函数,通过源代码和案例来展示其强大功能和应用场景。

二、sum()函数的基本用法

1. 对Series使用sum()

对于Series对象,sum()函数将返回该Series中所有元素的和。

import pandas as pd

# 创建一个Series对象
s = pd.Series([1, 2, 3, 4, 5])

# 使用sum()函数计算总和
total_sum = s.sum()
print(f"Series中所有元素的和为: {total_sum}")  # 输出: Series中所有元素的和为: 15

2. 对DataFrame使用sum()

对于DataFrame对象,sum()函数默认沿着列(axis=0)进行计算,返回每一列的和。

# 创建一个DataFrame对象
df = pd.DataFrame({
    'A': [1, 2, 3, 4, 5],
    'B': [5, 4, 3, 2, 1],
    'C': [10, 20, 30, 40, 50]
})

# 使用sum()函数计算每一列的和
column_sums = df.sum()
print(f"每一列的和为:\n{column_sums}")
# 输出:
# A    15
# B    15
# C   150
# dtype: int64

如果想要沿着行(axis=1)计算和,可以通过设置axis参数来实现。

# 使用sum()函数计算每一行的和
row_sums = df.sum(axis=1)
print(f"每一行的和为:\n{row_sums}")
# 输出:
# 0    15
# 1    26
# 2    36
# 3    46
# 4    56
# dtype: int64

三、sum()函数的高级用法

1. 跳过缺失值

sum()函数默认会跳过NaN值(即缺失值),只计算非NaN值的和。

# 创建一个包含NaN值的Series对象
s_with_nan = pd.Series([1, 2, np.nan, 4, 5])

# 使用sum()函数计算总和(会跳过NaN值)
total_sum_with_nan = s_with_nan.sum()
print(f"Series中所有元素的和为(忽略NaN): {total_sum_with_nan}")  # 输出: Series中所有元素的和为(忽略NaN): 12

2. 条件筛选后的数据上使用sum()

我们可以先使用布尔索引或条件表达式对数据进行筛选,然后再对筛选后的数据使用sum()函数。

# 找出A列大于2的行中,B列和C列的和
filtered_sum = df[(df['A'] > 2)][['B', 'C']].sum()
print(f"A列大于2的行中,B列和C列的和为:\n{filtered_sum}")
# 输出:
# B    10
# C   120
# dtype: int64

3. 与其他函数结合使用

在实际的数据分析中,我们通常会结合多个函数来进行多步骤的分析。例如,可以先对数据进行分组(groupby()),然后在每个组内计算总和。

# 按照'A'列的值对数据进行分组,并计算每个组中'C'列的和
grouped_sum = df.groupby('A')['C'].sum()
print(f"每个组中'C'列的和为:\n{grouped_sum}")
# 输出:
# A
# 1    10
# 2    20
# 3    30
# 4    40
# 5    50
# Name: C, dtype: int64

4. 使用level参数对多级索引进行求和

当DataFrame具有多级索引时,可以使用level参数指定在哪一级索引上进行求和。

# 创建一个具有多级索引的DataFrame

import numpy as np

# 创建一个具有多级索引的DataFrame
index = pd.MultiIndex.from_tuples([('A', 'foo'), ('A', 'bar'), ('B', 'foo'), ('B', 'bar'), ('C', 'foo')],
                                  names=['letter', 'word'])
df_multi = pd.DataFrame({'data1': [1, 2, 3, 4, 5], 'data2': [10, 20, 30, 40, 50]}, index=index)

print(df_multi)

# 使用sum()函数和level参数对第一级索引('letter')进行求和
sums_by_letter = df_multi.sum(level='letter')
print(f"按'letter'求和的结果为:\n{sums_by_letter}")

# 使用sum()函数和level参数对第二级索引('word')进行求和(注意这种情况较少见,因为通常第二级索引不具有唯一性)
# 但为了演示,我们仍然可以进行这样的操作
sums_by_word = df_multi.sum(level='word')
print(f"按'word'求和的结果(注意这可能不是预期的结果,因为索引不唯一):\n{sums_by_word}")

# 通常情况下,如果要在第二级索引上进行有意义的聚合,我们会结合groupby()函数
sums_grouped_by_word = df_multi.groupby(level='word').sum()
print(f"按'word'分组求和的结果:\n{sums_grouped_by_word}")

四、sum()函数的性能与优化

在处理大型数据集时,性能优化变得尤为重要。虽然Pandas的sum()函数已经经过高度优化,但在某些情况下,我们仍然可以通过一些策略来提高性能。

  1. 避免不必要的计算:尽量只对需要的数据进行计算,避免对整个数据集进行不必要的遍历。

  2. 使用更高效的数据类型:选择适合任务的数据类型可以显著提高性能。例如,使用整数类型而不是浮点数类型,如果可能的话。

  3. 减少内存使用:通过删除不再需要的列或行来减少DataFrame的内存占用,可以提高计算速度。

  4. 并行计算:Pandas本身并不直接支持并行计算,但可以使用其他库(如Dask或PySpark)来处理大型数据集,并实现并行求和等操作。

五、总结

Pandas的sum()函数是一个强大而灵活的工具,用于计算数据集中元素的总和。通过深入理解其基本用法和高级特性,我们可以更好地利用这个函数来处理和分析数据。在实际应用中,结合其他Pandas函数和策略,我们可以实现更复杂的数据分析任务,并优化性能。希望本文对您在使用Pandas中的sum()函数时有所帮助。

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云天徽上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值