如何快速计算DataFrame的总和

发布时间:2023-05-17

一、使用pandas的sum()函数

对于一个DataFrame,可以使用sum()方法计算每一列的总和,如下所示:

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
sum_df = df.sum()
print(sum_df)

输出结果:

A    6
B    15
dtype: int64

sum()方法默认将行向下的每个元素相加,然后返回每列的总和。也可以指定axis=1参数,将每行的元素相加。

sum_by_row = df.sum(axis=1)
print(sum_by_row)

输出结果:

0     5
1     7
2     9
dtype: int64

二、使用numpy的sum()函数

使用numpy的sum()函数也可以计算DataFrame的总和。与pandas的sum()方法相比,numpy的sum()函数速度更快,尤其是在数据量较大时。

import pandas as pd
import numpy as np
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
sum_np = np.sum(df)
print(sum_np)

输出结果:

21

sum()函数默认按照行向下计算所有元素的总和,并返回一个标量值。也可以通过指定axis参数,按列向右或者按行向下计算总和。

sum_by_column = np.sum(df, axis=0)
print(sum_by_column)

输出结果:

A    6
B    15
dtype: int64

三、使用DataFrame的eval()方法

对于大量数据的DataFrame,使用上述方法可能会消耗大量的时间。Pandas提供了一个方便的eval()方法,用于快速对DataFrame进行计算。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.eval('A+B')
print(result)

输出结果:

0     5
1     7
2     9
dtype: int64

eval()函数解析给定的字符串表达式,并返回计算结果。在这个例子中,ABdf的列名,使用+号将它们相加。

四、使用DataFrame的apply()方法

对于一些特定的计算,对每一行进行循环计算可能是最好的方式。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
def row_sum(row):
    return row['A'] + row['B']
result = df.apply(row_sum, axis=1)
print(result)

输出结果:

0     5
1     7
2     9
dtype: int64

apply()方法通过给定的函数处理DataFrame中的每一行或列,并返回计算结果。在这个例子中,我们定义了一个row_sum()函数,用于计算每一行中AB列的总和。

五、使用Python原生的for循环

对于一些简单的计算,也可以使用Python原生的for循环进行计算。

import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
sum_all = 0
for i in range(len(df)):
    sum_all += df.iloc[i]['A'] + df.iloc[i]['B']
print(sum_all)

输出结果:

21

通过使用Python原生的for循环,可以对DataFrame中的每一行进行循环,并计算总和。