Pandas 中的 Groupby 索引列

Luqman Khan 2023年1月30日 2022年5月16日
  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