Pandas 中的 Groupby 索引列

Luqman Khan 2023年1月30日
  1. 在 Python Pandas 中使用 groupby() 函式按索引列分組
  2. 在 Python Pandas 中對 CSV 檔案資料使用 groupby() 函式
Pandas 中的 Groupby 索引列

本教程介紹 Python Pandas 中的 groupby 如何對資料進行分類並將函式應用於類別。使用 groupby() 函式通過示例對 Pandas 中的多個索引列進行分組。

在 Python Pandas 中使用 groupby() 函式按索引列分組

在這篇文章中,Pandas DataFrame data.groupby() 函式根據特定標準將資料分組。Pandas 物件可以沿任意軸分為任意數量的組。

標籤到組名的對映是分組的抽象定義。groupby 操作拆分物件、應用函式並組合結果。

這對於對大量資料進行分組和執行操作很有用。Pandas groupby 預設行為將 groupby 列轉換為索引,並將它們從 DataFrame 的列列表中刪除。

語法:

DataFrame.groupby(
    by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True
)

引數:

by 對映、函式、字串或可迭代物件
axis 整數,預設值 0
level 對於多索引軸,按特定級別或級別(分層)分組。
as_index 作為聚合輸出的索引,返回一個帶有組標籤的物件。這僅適用於 DataFrame 輸入。當 index=False 時,輸出以 SQL 樣式分組。
sort 應該對組中的鍵進行排序。將其關閉以提高效能。應該注意的是,每組內的觀察順序不受此影響。Groupby 維護每個組內的行順序。
group_keys 呼叫 apply 時將組鍵新增到索引以識別碎片擠壓:如果可能,減少返回型別的維數;否則,返回一致的型別。

取一個包含兩列的 DataFrame:dateitem sellGroupby 日期和專案銷售並獲取使用者的逐項計數。

首先,我們需要匯入必要的庫 pandasnumpy,建立三個列 ctdateitem_sell 並將一組值傳遞給這些列。

import pandas as pd
import numpy as np

data = pd.DataFrame()
data["date"] = ["a", "a", "a", "b"]
data["item_sell"] = ["z", "z", "a", "a"]
data["ct"] = 1
print(data)

輸出:

  date item_sell  ct
0    a         z   1
1    a         z   1
2    a         a   1
3    b         a   1

使用 dateitem_sell 列進行分組。

import pandas as pd
import numpy as np

data = pd.DataFrame()
data["date"] = ["a", "a", "a", "b"]
data["item_sell"] = ["z", "z", "a", "a"]
data["ct"] = 1
output = pd.pivot_table(data, values="ct", index=["date", "item_sell"], aggfunc=np.sum)
print(output)

輸出:

 				ct
date item_sell
a    a           1
     z           2
b    a           1

groupby() by 引數現在可以引用列名稱或索引級別名稱。

import pandas as pd
import numpy as np

arrays = [
    ["rar", "raz", "bal", "bac", "foa", "foa", "qus", "qus"],
    ["six", "seven", "six", "seven", "six", "seven", "six", "seven"],
]
index = pd.MultiIndex.from_arrays(arrays, names=["first", "second"])
data = pd.DataFrame({"C": [1, 1, 1, 1, 2, 2, 3, 3], "D": np.arange(8)}, index=index)
print(data)

輸出:

              C  D
first second
rar   six     1  0
raz   seven   1  1
bal   six     1  2
bac   seven   1  3
foa   six     2  4
      seven   2  5
qus   six     3  6
      seven   3  7

secondC 分組,然後使用 sum 函式計算總和。

import pandas as pd
import numpy as np

arrays = [
    ["rar", "raz", "bal", "bac", "foa", "foa", "qus", "qus"],
    ["six", "seven", "six", "seven", "six", "seven", "six", "seven"],
]
index = pd.MultiIndex.from_arrays(arrays, names=["first", "second"])
data = pd.DataFrame({"C": [1, 1, 1, 1, 2, 2, 3, 3], "D": np.arange(8)}, index=index)
output = data.groupby(["second", "C"]).sum()
print(output)

輸出:

按秒分組

在 Python Pandas 中對 CSV 檔案資料使用 groupby() 函式

現在對 CSV 檔案使用 groupby() 函式。要下載程式碼中使用的 CSV 檔案,請單擊此處([學生在考試中的表現 | Kaggle])。

使用的 CSV 檔案是關於學生表現的。要根據 gender 對資料進行分組,請使用 groupby() 函式。

Python Pandas 庫的 read_csv 函式用於從驅動器中讀取檔案。將檔案儲存在資料變數中。

import pandas as pd

data = pd.read_csv("/content/drive/MyDrive/CSV/StudentsPerformance.csv")
print(data)

輸出:

CSV 檔案的資料集

應用 groupby() 函式。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std = data.groupby("gender")
print(std.first())

按性別分組

讓我們列印任何組中的值。為此,請使用團隊的名稱。

get_group 函式用於查詢任何組中的條目。找出 female 組中包含的值。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std = data.groupby("gender")
print(std.get_group("female"))

輸出:

按女性值設定組

使用 groupby() 函式建立多個類別組。要拆分,請使用多個列。

import pandas as pd

data = pd.read_csv("StudentsPerformance.csv")
std_per = data.groupby(["gender", "lunch"])
print(std_per.first())

輸出:

按性別分組午餐

Groupby() 是一個具有多種變體的通用函式。它使得根據某些標準拆分 DataFrame 變得非常簡單和高效。

相關文章 - Pandas Groupby