探索Pandas GroupBy的奧秘

Pandas是Python中數據分析最重要的工具之一,而GroupBy是Pandas一個非常有用的函數,它具有重要的數據分析和操作功能。本文將會從多個角度解析Pandas GroupBy函數的功能和用法。

一、數據分組

GroupBy函數用於將DataFrame對象中的數據進行分組操作,首先需要先創建一個DataFrame:

import pandas as pd

data = {'name': ['John', 'Sam', 'John', 'Sam', 'Tom'],
        'age': [25, 30, 35, 40, 45],
        'sex': ['M', 'M', 'M', 'M', 'M'],
        'salary': [2000, 2500, 3000, 3500, 4000]}

df = pd.DataFrame(data)

然後,我們就可以通過GroupBy函數將數據按照需要的列進行分組。例如,我們首先按照“name”列對數據進行分組:

grouped = df.groupby('name')

這樣就可以將數據按照名稱分成三個組,分別是“John”、“Sam”和“Tom”。在以上代碼中,GroupBy函數返回了一個DataFrameGroupBy對象,這個對象包含了分組後的數據,我們可以通過apply()、aggregate()、transform()等函數對這些分組後的數據進行操作。

二、使用apply()函數

apply()函數是GroupBy函數中常用的一個函數,它可以對分組後的數據進行自定義的操作。例如,我們可以通過以下代碼對“salary”列求和:

grouped.apply(lambda x: x['salary'].sum())

以上代碼會返回一個Series對象,包含了每個組的“salary”列的和。

此外,apply()函數還可以應用自定義的函數,例如,我們可以定義一個函數來計算每個組的平均工資:

def mean_salary(group):
    return group['salary'].mean()

grouped.apply(mean_salary)

以上代碼將會返回一個DataFrame對象,包含了每個組的平均工資。

三、使用aggregate()函數

aggregate()函數可以對分組後的數據進行多個聚合操作,例如求和、均值、方差等。以下代碼可以同時計算每個組的平均年齡和平均工資:

grouped.aggregate({'age': 'mean', 'salary': 'mean'})

以上代碼會返回一個DataFrame對象,包含每個組的平均年齡和平均工資的值。

四、使用transform()函數

transform()函數是GroupBy函數的另一個常用函數,它可以對每個組中的數據進行組內操作,並且將結果返回到原始DataFrame中的相應位置。例如,我們可以將每個組的工資減去平均工資:

grouped.transform(lambda x: x['salary'] - x['salary'].mean())

以上代碼將會返回一個Series對象,包含每個組所有數據的工資減去平均工資的值。

五、使用agg()函數

agg()函數是aggregate()函數的簡化版,它可以對分組後的數據進行多個聚合操作,例如求和、均值、方差等。以下代碼可以同時計算每個組的平均年齡和平均工資:

grouped.agg(['mean', 'std'])

以上代碼將會返回一個DataFrame對象,包含每個組的平均年齡和平均工資的值,以及它們的標準差。

六、使用GroupBy對象獲取分組信息

GroupBy對象包含了分組後的數據,也包含了分組的信息,可以通過以下代碼獲取分組後的所有組名:

grouped.groups.keys()

以上代碼將會返回一個字典對象,包含了所有的組名。

除此之外,GroupBy對象還包含了其它有用的屬性和方法,例如size、indices、get_group等。

七、使用多個鍵進行分組

當需要使用多個鍵進行分組時,可以在GroupBy函數中傳入多個列名。例如,以下代碼將會按照“name”和“sex”兩個列進行分組:

grouped = df.groupby(['name', 'sex'])

通過以上代碼,我們就可以將數據分成多個組,每個組都是由“name”和“sex”兩個列值所確定的。

八、使用Categorical類型進行分組

有時候我們需要將數據按照分類值進行分組操作,可以使用Pandas中的Categorical類型。以下代碼將會將年齡分成三個分類,然後根據分類進行分組:

df['age_group'] = pd.cut(df['age'], [20, 30, 40, 50])
grouped = df.groupby('age_group')

通過以上代碼,我們將“age”列按照20-30、30-40、40-50三個區間進行了分類,並且將分類保存到了“age_group”列中。

九、使用自定義函數進行複雜分組

有時候需要根據自定義的規則進行複雜的分組操作,可以通過自定義函數來實現。以下代碼將會根據每個人工資是否高於平均工資進行分組:

def higher_salary(group):
    return group['salary'].mean() < group['salary']

grouped = df.groupby(higher_salary)

以上代碼使用了自定義的函數“higher_salary”,該函數返回一個Series對象,表示每個人的工資是否高於平均工資。然後,我們可以根據該函數的返回值進行分組操作。

總結

通過本文的介紹,我們了解到了Pandas GroupBy函數的基本功能和用法,包括數據分組、apply()、aggregate()、transform()、agg()等常用函數。此外,我們還介紹了如何使用GroupBy對象獲取分組信息,以及如何使用多個鍵、Categorical類型和自定義函數進行複雜分組。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/207034.html

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

相關推薦

  • index.m3u8+-1的奧秘

    本文將從以下多個方面對index.m3u8+-1進行詳細的闡述,解答該問題。 一、什麼是index.m3u8文件? index.m3u8是HLS (HTTP Live Stream…

    編程 2025-04-29
  • Pandas下載whl指南

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

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

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

    編程 2025-04-27
  • 深入解析pandas的drop_duplicates()函數

    在數據處理和清洗過程中,一個經常出現的問題是如何移除重複的數據項。pandas提供了一種方便易用的方式來完成這項任務——drop_duplicates()函數。本文將從多個方面深入…

    編程 2025-04-24
  • 詳解pandas fillna 指定列

    一、fillna的基礎用法 fillna是pandas中一個常用的函數,它用於填充數據框或序列中的空值。我們先來看一個簡單的案例: import pandas as pd impo…

    編程 2025-04-24
  • Pandas apply函數詳解

    Pandas是Python的一個開源數據分析庫,專門用於數據操作和分析。其中apply()函數是Pandas中常用的數據操作函數之一,本文將從多個方面對這個函數進行詳細的闡述。 一…

    編程 2025-04-24
  • Pandas分組統計

    Pandas是一個強大的數據分析工具,可以用來處理大量的數據,包括分組,匯總和統計等。當面對大量的數據時,經常需要按照特定的標準對數據進行分組,然後對每個組進行統計分析,這時候就需…

    編程 2025-04-23
  • Pandas讀取txt文件詳解

    一、pandas讀取txt文件存入excel表 在數據處理中,我們通常將原始數據存儲為txt文件,而pandas提供了很多方法來讀取txt文件。下面我們演示如何將txt文件讀取並存…

    編程 2025-04-22
  • 深入探究pandas遍歷每一行

    pandas是一個強大的Python數據分析庫,它提供了豐富的數據結構和函數,用於數據清洗、數據處理和數據分析。其中,最重要的數據結構之一是DataFrame,它類似於SQL中的表…

    編程 2025-04-13
  • pandas unstack詳解

    一、概述 pandas是一個流行的數據處理庫,而unstack是pandas中一個很常見的操作,它可以將pivot後的表再次變換成我們需要的格式,比如將二維的DataFrame轉變…

    編程 2025-04-12

發表回復

登錄後才能評論