Pandas 列の合計を取得する方法
Asad Riaz
2023年1月30日
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
メソッドを使用して累積合計を取得できます。次の DataFrame
に Date
、Fruit
、Sale
列があるとします:
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)
上記のコードでは、新しい列 sum
を DataFrame
に追加します。sum
要素は、['x']
が 1 より大きい場合、最初の 2 列 ['x'、 'y']
の合計です。それ以外の場合は、sum
を 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