如何获得 Pandas 列中元素总和

  1. 获取 Pandas DataFrame 列和的方法
  2. groupby 的累加总和
  3. 基于其他列值的条件获取列总和的方法

我们将介绍如何获取 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 方法来获得累计和。考虑以下带有 DataFrameFruitSale 列的 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
comments powered by Disqus