pandas 是一個用於數據處理和分析的 Python 庫,由於其強大而簡單的功能,已經成為了數據科學家和分析師的首選庫之一。在 pandas 中,groupby 是一個非常重要的函數,它可以幫助我們對數據進行分組和聚合。本文將詳細介紹 pandas groupby 函數的各種用法。
一、分組(Grouping)
groupby函數是將數據按照一定規則分成一組的工具。其基本語法如下:
grouped = df.groupby(key)
其中,key是指按照哪個列進行分組。groupby函數返回的是按照指定列分組後的一個groupby對象。我們可以通過如下代碼觀察分組的結果:
import pandas as pd
data = {'Name': ['Mike', 'Bob', 'Alex', 'Alice', 'Bruce', 'Bob'],
'Gender': ['M', 'M', 'M', 'F', 'M', 'M'],
'City': ['Beijing', 'Shanghai', 'Shanghai', 'Beijing','Beijing', 'Shanghai'],
'Salary': [10000, 30000, 20000, 15000, 25000, 15000]
}
df = pd.DataFrame(data)
grouped = df.groupby('City')
for name, group in grouped:
print(name)
print(group)
print("---------")
運行以上代碼,輸出結果如下:
Beijing Name Gender City Salary 0 Mike M Beijing 10000 3 Alice F Beijing 15000 4 Bruce M Beijing 25000 --------- Shanghai Name Gender City Salary 1 Bob M Shanghai 30000 2 Alex M Shanghai 20000 5 Bob M Shanghai 15000 ---------
該結果表明,我們按照城市對數據進行了分組,然後將分組結果依次輸出。
二、聚合(Aggregation)
在分組完成之後,我們可能需要對每一個組進行聚合操作。在 pandas 中,有多種聚合函數可供選擇。比如:
- mean:計算組的平均值
- sum:計算組的總和
- size:計算組的大小
- max:計算組的最大值
- min:計算組的最小值
- std:計算組的標準差
- var:計算組的方差
我們可以使用這些聚合函數來對每一個組進行聚合操作。其基本語法如下:
grouped = df.groupby(key)
grouped.agg(func)
其中,func是我們想要對組進行的聚合操作,可以是mean、sum、size等。
下面是一些代碼示例:
# 按城市計算平均薪資
grouped = df.groupby('City')
grouped['Salary'].mean()
# 輸出結果如下
# City
# Beijing 16666.666667
# Shanghai 21666.666667
# Name: Salary, dtype: float64
# 按城市和性別計算平均薪資和總薪資
grouped = df.groupby(['City', 'Gender'])
grouped['Salary'].agg([np.mean, np.sum])
# 輸出結果如下
# mean sum
# City Gender
# Beijing F 15000 15000
# M 17500 35000
# Shanghai M 18750 37500
三、迭代(Iteration)
通過 groupby 函數分組後,我們可以使用其迭代功能來遍歷每一個分組。其基本語法如下:
for name, group in grouped:
# 對每一個分組進行操作
其中,name是指分組的名稱,group是指對應分組的 DataFrame。
例如,我們可以按城市分組並遍歷每一個分組,輸出平均薪資:
grouped = df.groupby('City')
for name, group in grouped:
print(name)
print(group['Salary'].mean())
print("---------")
輸出結果如下:
Beijing 16666.666666666668 --------- Shanghai 21666.666666666668 ---------
四、過濾(Filtering)
我們可以使用 filter 函數篩選出符合條件的數據。其基本語法如下:
grouped = df.groupby(key)
grouped.filter(func)
其中,func是一個函數,用來判斷某一行是否符合條件。
例如,我們可以按城市分組,然後篩選出平均薪資高於20000的行:
grouped = df.groupby('City')
grouped.filter(lambda x: x['Salary'].mean() > 20000)
# 輸出結果如下
# Name Gender City Salary
# 1 Bob M Shanghai 30000
# 2 Alex M Shanghai 20000
# 4 Bruce M Beijing 25000
五、轉換(Transforming)
Transforming 操作是指對每一個分組進行獨立的操作,且該操作生成的結果的行列數與原來的 DataFrame 相同。其基本語法如下:
grouped = df.groupby(key)
grouped.transform(func)
其中,func是一個函數,用來對每一個分組進行操作。
例如,我們可以按城市分組,然後對每一個分組進行標準化處理:
grouped = df.groupby('City')
score = lambda x: (x - x.mean()) / x.std()
grouped.transform(score)
# 輸出結果如下:
# Salary
# 0 -1.135550
# 1 1.000000
# 2 -0.707107
# 3 -0.404520
# 4 0.707107
# 5 -0.450981
六、應用(Applying)
使用 apply 函數可以對整個 DataFrame 進行獨立的操作,其可以返回任意形狀的結果。其基本語法如下:
grouped = df.groupby(key)
grouped.apply(func)
其中,func是一個函數,用來對整個 DataFrame 進行操作。
例如,我們可以按城市分組,然後對每一個分組進行 t-檢驗:
import scipy.stats as stats
grouped = df.groupby('City')
def t_test(group):
return stats.ttest_1samp(group['Salary'], 20000)
grouped.apply(t_test)
# 輸出結果如下:
# City
# Beijing 0.670820
# Shanghai 1.000000
#
該結果表明,北京的平均薪資顯著低於20000,而上海的平均薪資則不顯著低於20000。
結束語
pandas groupby 函數是 pandas 庫中非常重要而實用的功能。通過本文的詳細介紹,相信大家已經學會了如何對數據進行分組、聚合、迭代、篩選、轉化和應用操作,這些操作都是非常有用且廣泛使用的數據分析工具。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238469.html