Pandas 列の合計を取得する方法

  1. Pandas DataFrame 列の合計を取得するメソッド
  2. groupby メソッドによる累積合計
  3. 他の列の値の条件に基づいて列の合計を取得するメソッド

Pandas Dataframe の「列」の合計を取得する方法、groupby を使用して累積合計を計算する方法、および他の列の値の条件に基づいて列の dataframe の合計を紹介します。

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 メソッドを使用して累積合計を取得できます。次の DataframeDateFruitSale 列があるとします:

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)

上記のコードでは、新しい列 sumDataframe に追加します。sum 要素は、['x'] が 1 より大きい場合、最初の 2 列 ['x'、 'y'] の合計です。それ以外の場合は、sum0 に置き換えます。

コードを実行すると、次の出力が得られます。

          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