pandas groupby 用法詳解

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-tw/n/238469.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • Pandas下載whl指南

    本篇文章將從幾個方面為大家詳細解答如何下載Pandas的whl文件。 一、Pandas簡介 Pandas是一個基於Python的軟體庫,主要用於數據分析、清洗和處理。在數據處理方面…

    編程 2025-04-28
  • 如何在Python中安裝和使用Pandas

    本文將介紹如何安裝和使用Python的Pandas庫 一、Pandas庫的介紹 Pandas是Python的一個數據分析庫,提供了許多實用的數據結構和數據分析工具,可以幫助用戶輕鬆…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁碟中。在執行sync之前,所有的文件系統更新將不會立即寫入磁碟,而是先緩存在內存…

    編程 2025-04-25
  • 神經網路代碼詳解

    神經網路作為一種人工智慧技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網路的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網路模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • 詳解eclipse設置

    一、安裝與基礎設置 1、下載eclipse並進行安裝。 2、打開eclipse,選擇對應的工作空間路徑。 File -> Switch Workspace -> [選擇…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分散式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • Python安裝OS庫詳解

    一、OS簡介 OS庫是Python標準庫的一部分,它提供了跨平台的操作系統功能,使得Python可以進行文件操作、進程管理、環境變數讀取等系統級操作。 OS庫中包含了大量的文件和目…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論