欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python中pandas groupby()用法案例詳解

 更新時(shí)間:2024年03月21日 11:42:08   作者:高斯小哥  
groupby()函數(shù)是pandas庫中一個(gè)非常強(qiáng)大的工具,它允許我們按照一個(gè)或多個(gè)特征對(duì)數(shù)據(jù)進(jìn)行分組,并對(duì)每個(gè)組進(jìn)行聚合、轉(zhuǎn)換和過濾操作,本文將探討pandas庫中非常強(qiáng)大的groupby()函數(shù),感興趣的朋友跟隨小編一起看看吧

?? 歡迎來到Python進(jìn)階學(xué)習(xí)之旅!今天,我們將深入探討pandas庫中非常強(qiáng)大的groupby()函數(shù)。groupby()函數(shù)在數(shù)據(jù)分析和數(shù)據(jù)清洗中發(fā)揮著關(guān)鍵作用,能夠幫助我們輕松地對(duì)數(shù)據(jù)進(jìn)行分組、聚合和轉(zhuǎn)換。

一、為什么需要groupby()?

在處理大量數(shù)據(jù)時(shí),我們經(jīng)常需要按照某個(gè)或多個(gè)特征對(duì)數(shù)據(jù)進(jìn)行分組,以便更好地理解數(shù)據(jù)的結(jié)構(gòu)和關(guān)系。例如,我們可能希望按照年份、地區(qū)或產(chǎn)品類別對(duì)數(shù)據(jù)進(jìn)行分組,并對(duì)每個(gè)組進(jìn)行聚合運(yùn)算,如求和、平均值、最大值等。這時(shí),groupby()函數(shù)就顯得非常有用。

二、groupby()的基本用法

首先,我們需要導(dǎo)入pandas庫,并創(chuàng)建一個(gè)示例數(shù)據(jù)集。然后,我們可以使用groupby()函數(shù)按照指定的列對(duì)數(shù)據(jù)進(jìn)行分組。

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的GroupBy對(duì)象
print(grouped)

輸出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B2C070B8E0>

上述代碼將按照列’A’的值對(duì)DataFrame進(jìn)行分組,并返回一個(gè)GroupBy對(duì)象。我們可以進(jìn)一步對(duì)這個(gè)對(duì)象進(jìn)行聚合運(yùn)算。

三、聚合運(yùn)算

GroupBy對(duì)象提供了多種聚合函數(shù),如sum()mean()、max()等。我們可以使用這些函數(shù)對(duì)每個(gè)組進(jìn)行聚合運(yùn)算。

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的對(duì)象
print(grouped)
# 計(jì)算每個(gè)組的平均值
mean_grouped = grouped.mean()
print(mean_grouped)
# 計(jì)算每個(gè)組的總和
sum_grouped = grouped.sum()
print(sum_grouped)

輸出:

C D
A
bar 0.658173 -0.225388
foo 0.778100 -0.164148
C D
A
bar 1.97452 -0.676164
foo 3.89050 -0.820740

除了內(nèi)置的聚合函數(shù)外,我們還可以使用agg()函數(shù)應(yīng)用自定義的聚合函數(shù)。例如,我們可以計(jì)算每個(gè)組的標(biāo)準(zhǔn)差:

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的對(duì)象
print(grouped)
# 計(jì)算每個(gè)組的標(biāo)準(zhǔn)差
std_grouped = grouped.agg(np.std)
print(std_grouped)

輸出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B2F480B880>
C D
A
bar 0.101229 0.274698
foo 0.996597 0.812362

四、高級(jí)用法與技巧

除了基本的分組和聚合操作外,groupby()還提供了許多高級(jí)功能,如應(yīng)用自定義函數(shù)、轉(zhuǎn)換數(shù)據(jù)等。

?? 應(yīng)用自定義函數(shù)

我們可以使用apply()方法應(yīng)用自定義函數(shù)到每個(gè)組。例如,我們可以定義一個(gè)函數(shù)來計(jì)算每個(gè)組的最大值和最小值之差:

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的對(duì)象
print(grouped)
# 定義一個(gè)自定義函數(shù),計(jì)算每個(gè)組的最大值和最小值之差
def range_diff(group):
    return group.max() - group.min()
# 使用apply()應(yīng)用自定義函數(shù)
diff_grouped = grouped.apply(range_diff)
print(diff_grouped)

輸出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002ACBD83AA60>
C D
A
bar 2.497695 1.086924
foo 2.826518 2.063781

?? 數(shù)據(jù)轉(zhuǎn)換

groupby()還提供了transform()方法,用于將聚合運(yùn)算的結(jié)果廣播到原始數(shù)據(jù)的每一行。這在數(shù)據(jù)轉(zhuǎn)換中非常有用。

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的對(duì)象
print(grouped)
# 使用transform()方法將每個(gè)組的平均值廣播到原始數(shù)據(jù)的每一行
mean_transformed = grouped['C'].transform('mean')
print(mean_transformed)
# 將轉(zhuǎn)換后的平均值添加到原始DataFrame中
df['C_mean'] = mean_transformed
print(df)

輸出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000188A56DA8E0>
0 0.344876
1 -1.358760
2 0.344876
3 -1.358760
4 0.344876
5 -1.358760
6 0.344876
7 0.344876
Name: C, dtype: float64
A C D C_mean
0 foo 0.783914 -1.027288 0.344876
1 bar -2.072893 -0.972087 -1.358760
2 foo 0.035637 -0.315908 0.344876
3 bar -1.953068 0.409697 -1.358760
4 foo 0.576048 -0.258289 0.344876
5 bar -0.050318 -1.115734 -1.358760
6 foo 0.093456 0.106227 0.344876
7 foo 0.235322 1.365150 0.344876

?? 過濾數(shù)據(jù)

除了聚合和轉(zhuǎn)換外,我們還可以使用filter()方法根據(jù)條件過濾出滿足條件的組。

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)簡單的DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'C': np.random.randn(8),
    'D': np.random.randn(8)
}
df = pd.DataFrame(data)
# 使用groupby按列'A'進(jìn)行分組
grouped = df.groupby('A')
# 打印分組后的對(duì)象
print(grouped)
# 使用filter()方法過濾出滿足條件的組(例如,組的大小大于3)
filtered_groups = grouped.filter(lambda x: len(x) > 3)
print(filtered_groups)

輸出:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000015ADE2FA940>
A C D
0 foo 1.967217 0.005976
2 foo 0.950149 0.098143
4 foo 0.568101 1.461587
6 foo -1.905337 -1.106591
7 foo -0.168686 0.692850

五、實(shí)際案例應(yīng)用

最后,讓我們通過一個(gè)實(shí)際案例來演示如何應(yīng)用groupby()函數(shù)進(jìn)行數(shù)據(jù)分析和清洗。

假設(shè)我們有一個(gè)包含銷售數(shù)據(jù)的DataFrame,其中包含日期、地區(qū)、產(chǎn)品名稱、銷售額等列。我們希望按地區(qū)和產(chǎn)品名稱對(duì)數(shù)據(jù)進(jìn)行分組,并計(jì)算每個(gè)組的總銷售額。

import numpy as np
import pandas as pd
# 創(chuàng)建一個(gè)包含銷售數(shù)據(jù)的DataFrame
sales_data = {
    'date': pd.date_range(start='2023-01-01', periods=100),
    'region': np.random.choice(['North', 'South', 'East', 'West'], size=100),
    'product': np.random.choice(['Product A', 'Product B', 'Product C'], size=100),
    'sales': np.random.rand(100) * 1000
}
df_sales = pd.DataFrame(sales_data)
# 按地區(qū)和產(chǎn)品名稱對(duì)數(shù)據(jù)進(jìn)行分組,并計(jì)算總銷售額
grouped_sales = df_sales.groupby(['region', 'product'])['sales'].sum().reset_index()
# 打印分組后的銷售額
print(grouped_sales)

輸出:

region product sales
0 East Product A 2728.679432
1 East Product B 1847.966730
2 East Product C 4518.356763
3 North Product A 5882.374531
4 North Product B 5519.364196
5 North Product C 4229.953852
6 South Product A 5303.784425
7 South Product B 2321.080682
8 South Product C 4239.002167
9 West Product A 1689.650513
10 West Product B 4002.790867
11 West Product C 4894.553548

在這個(gè)案例中,我們首先創(chuàng)建了一個(gè)包含銷售數(shù)據(jù)的DataFrame。然后,我們使用groupby()函數(shù)按地區(qū)和產(chǎn)品名稱對(duì)數(shù)據(jù)進(jìn)行分組,并使用sum()函數(shù)計(jì)算每個(gè)組的總銷售額。最后,我們使用reset_index()函數(shù)將結(jié)果轉(zhuǎn)換為一個(gè)新的DataFrame,并打印出來。

六、總結(jié)

groupby()函數(shù)是pandas庫中一個(gè)非常強(qiáng)大的工具,它允許我們按照一個(gè)或多個(gè)特征對(duì)數(shù)據(jù)進(jìn)行分組,并對(duì)每個(gè)組進(jìn)行聚合、轉(zhuǎn)換和過濾操作。通過熟練掌握groupby()函數(shù)的用法,我們可以更高效地處理和分析大量數(shù)據(jù),從而洞察數(shù)據(jù)的內(nèi)在結(jié)構(gòu)和關(guān)系。希望這篇博客能夠幫助你更好地理解和應(yīng)用groupby()函數(shù)!

七、期待與你共同進(jìn)步

到此這篇關(guān)于Python中pandas groupby()用法詳解的文章就介紹到這了,更多相關(guān)pandas groupby()用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python基于鏈接表實(shí)現(xiàn)無向圖最短路徑搜索

    Python基于鏈接表實(shí)現(xiàn)無向圖最短路徑搜索

    鏈接表的存儲(chǔ)相比較鄰接炬陣,使用起來更方便,對(duì)于空間的使用是剛好夠用原則,不會(huì)產(chǎn)生太多空間浪費(fèi)。所以本文將以鏈接表方式實(shí)現(xiàn)無向圖最短路徑搜索,需要的可以參考一下
    2022-04-04
  • Python玩轉(zhuǎn)加密的技巧【推薦】

    Python玩轉(zhuǎn)加密的技巧【推薦】

    Python 中的一個(gè)有用的基本加密庫就叫做 cryptography 。這篇文章主要介紹了Python玩轉(zhuǎn)加密的技巧,需要的朋友可以參考下
    2019-05-05
  • Pycharm使用Gitee解讀

    Pycharm使用Gitee解讀

    這篇文章主要介紹了Pycharm使用Gitee解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python自動(dòng)連接ssh的方法

    Python自動(dòng)連接ssh的方法

    這篇文章主要介紹了Python自動(dòng)連接ssh的方法,實(shí)例分析了基于Python實(shí)現(xiàn)連接ssh的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 在Python中使用PIL模塊處理圖像的教程

    在Python中使用PIL模塊處理圖像的教程

    這篇文章主要介紹了在Python中使用PIL模塊處理圖像的教程,PIL模塊在Python編程中也是十分常用的模塊,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04
  • python安裝cx_Oracle模塊常見問題與解決方法

    python安裝cx_Oracle模塊常見問題與解決方法

    這篇文章主要介紹了python安裝cx_Oracle模塊常見問題與解決方法,舉例分析了Python在Windows平臺(tái)與Linux平臺(tái)安裝cx_Oracle模塊常見問題、解決方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • Python Threading 線程/互斥鎖/死鎖/GIL鎖

    Python Threading 線程/互斥鎖/死鎖/GIL鎖

    這篇文章主要介紹了Python Threading 線程/互斥鎖/死鎖/GIL鎖的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 如何獲取DataFrame值的索引以及其他

    如何獲取DataFrame值的索引以及其他

    這篇文章主要介紹了如何獲取DataFrame值的索引以及其他問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼)

    10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼)

    這篇文章主要介紹了10分鐘學(xué)會(huì)使用python實(shí)現(xiàn)人臉識(shí)別(附源碼),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • python多重繼承實(shí)例

    python多重繼承實(shí)例

    這篇文章主要介紹了python多重繼承實(shí)例,簡單實(shí)用易于理解,需要的朋友可以參考下
    2014-10-10

最新評(píng)論