HOWTO · Pandas

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

このチュートリアルでは、Pandas DataFrame で列の合計を取得する方法を示します。

このページの内容

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