如何用 group-by 和 sum 獲得 Pandas 總和

Asad Riaz 2023年1月30日
  1. groupby 的累計總和
  2. pivot() 在一個漂亮的表中重新排列資料
  3. Pandas 中將函式應用於 groupby
  4. agg() 獲取列的總和
如何用 group-by 和 sum 獲得 Pandas 總和

我們將演示如何獲取 Pandas 的 groupby 和 sum 的總和。我們還將研究 pivot 功能,以將資料排列在一個漂亮的表中,以及如何定義自定義函式並將其應用到 DataFrame 上。我們還能通過使用 agg() 獲得總和。

groupby 的累計總和

我們可以使用 groupby 方法來獲得累計和。比如以下具有日期,水果名稱和銷售的 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

pivot() 在一個漂亮的表中重新排列資料

pivot() 方法可以設定表格的行和列屬性。讓我們更改上面的程式碼,並應用 pivot() 方法重新排列漂亮表中的資料:

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(["Fruit", "Date"], as_index=False).sum().pivot("Fruit", "Date").fillna(0)
)

輸出:

             Sale           
Date   08/09/2018 10/09/2018
Fruit                       
Apple          34         12
Banana         22         27

Pandas 中將函式應用於 groupby

我們將建立一個簡單的方法來獲取 series 或一維陣列中的值計數,並使用 groupby 來獲取每個值的總計數:

from pandas import *

d = {"series": Series(["1", "2", "1", "1", "4", "4", "5"])}
df = DataFrame(d)


def get_count(values):
    return len(values)


grouped_count = df.groupby("series").series.agg(get_count)
print(grouped_count)

執行程式碼後,我們將獲得以下輸出,該輸出提供 series 中每個值的出現次數。

輸出:

series
1    3
2    1
4    2
5    1
Name: series, dtype: int64

agg() 獲取列的總和

我們可以使用 agg() 在列上應用求和運算。考慮以下程式碼:

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(["Fruit"])["Sale"].agg("sum"))

輸出:

Fruit
Apple     46
Banana    49
Name: Sale, dtype: int64

相關文章 - Pandas DataFrame