如何获得 Pandas 列中元素总和
Asad Riaz
2023年1月30日
2020年3月28日
我们将介绍如何获取 Pandas DataFrame 列的元素总和,以及使用 groupby
计算累积和的方法,以及基于其他列值数据的条件来得到列和的方法。
获取 Pandas DataFrame
列和的方法
首先,我们使用 NumPy
库创建一个随机数组,然后使用 sum()
函数获取每个列的总和。
import numpy as np
import pandas as pd
df = pd.DataFrame(
np.random.randint(0,10,size=(10, 4)),
columns=list('1234'))
print(df)
Total = df['1'].sum()
print ("Column 1 sum:",Total)
Total = df['2'].sum()
print ("Column 2 sum:",Total)
Total = df['3'].sum()
print ("Column 3 sum:",Total)
Total = df['4'].sum()
print ("Column 4 sum:",Total)
如果运行此代码,你将获得以下输出(你的情况下值可能不同),
1 2 3 4
0 2 2 3 8
1 9 4 3 1
2 8 5 6 0
3 9 5 7 4
4 2 7 3 7
5 9 4 1 3
6 6 7 7 3
7 0 4 2 8
8 0 6 6 4
9 5 8 7 2
Column 1 sum: 50
Column 2 sum: 52
Column 3 sum: 45
Column 4 sum: 40
与 groupby
的累加总和
我们可以使用 groupby
方法来获得累计和。考虑以下带有 DataFrame
,Fruit
和 Sale
列的 DataFrame
:
import pandas as pd
df = pd.DataFrame(
{
'Date':
['08/09/2018',
'10/09/2018',
'08/09/2018',
'10/09/2018'],
'Fruit':
['Apple',
'Apple',
'Banana',
'Banana'],
'Sale':
[34,
12,
22,
27]
})
如果我们要计算每个水果的累计销售总额,对于每个日期我们可以这样计算,
import pandas as pd
df = pd.DataFrame(
{
'Date':
['08/09/2018',
'10/09/2018',
'08/09/2018',
'10/09/2018'],
'Fruit':
['Apple',
'Apple',
'Banana',
'Banana'],
'Sale':
[34,
12,
22,
27]
})
print(df.groupby(by=['Fruit','Date']).sum().groupby(level=[0]).cumsum())
运行上述代码后,我们将获得以下输出,该输出显示每个日期的水果累积总和:
Fruit Date Sale
Apple 08/09/2018 34
10/09/2018 46
Banana 08/09/2018 22
10/09/2018 49
基于其他列值的条件获取列总和的方法
此方法提供了在给定条件为 True
时获取总和的功能,以及在条件为 False
时用给定值替换总和的功能。考虑以下代码
import numpy as np
import pandas as pd
df = pd.DataFrame(
np.random.randn(5,3),
columns=list('xyz'))
df['sum'] = df.loc[df['x'] > 0,['x','y']].sum(axis=1)
df['sum'].fillna(0, inplace=True)
print(df)
在上面的代码中,我们将新列总和添加到 DataFrame
中,这是第一列 ['x','y']
的和,如果 ['x']
大于 1,否则我们将和替换为 0
。
运行代码后,我们将获得以下输出(根据你的情况,值可能会更改)。
x y z sum
0 -1.067619 1.053494 0.179490 0.000000
1 -0.349935 0.531465 -1.350914 0.000000
2 -1.650904 1.534314 1.773287 0.000000
3 2.486195 0.800890 -0.132991 3.287085
4 1.581747 -0.667217 -0.182038 0.914530