如何獲得 Pandas 列中元素總和
Asad Riaz
2023年1月30日
我們將介紹如何獲取 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