在現(xiàn)實(shí)世界的數(shù)據(jù)分析中,我們經(jīng)常需要根據(jù)某些特征將數(shù)據(jù)進(jìn)行分組,然后對每個(gè)組進(jìn)行聚合分析。比如,我們可能想要按照地區(qū)、時(shí)間、類別等因素對銷售數(shù)據(jù)進(jìn)行分組,然后計(jì)算每組的平均值、總和等指標(biāo)。這就是數(shù)據(jù)分組的重要性所在。
我們數(shù)據(jù)分組使用的是pandas.groupby()方法
其基本語法如下
我們先來看一個(gè)簡單的例子。
我們導(dǎo)入我們的學(xué)生成績數(shù)據(jù),然后查看數(shù)據(jù)
import pandas as pd
df = pd.read_excel('./pandas_data/stu_data.xlsx')
df.head()
接下來我們根據(jù)課程列進(jìn)行分組,查看分組后數(shù)據(jù)類型
分組對象的數(shù)據(jù)類型是pandas.core.groupby.generic.DataFrameGroupBy
那么我們可以通過分組對象的groups方法查看分組里數(shù)據(jù)
dfg.groups
它會返回一個(gè)類字典視圖對象
鍵是分組類別,值是分組的具體值。
我們還可以查看分組的描述。使用descrbe方法
這是我們的單列分組,此外我們還可以根據(jù)多列分組,只需要把分組變量以列表形式傳遞到by參數(shù)即可。我們在來看個(gè)例子
dfgg = df.groupby(['性別','課程'])
dfgg.groups
我們還可以拿出分組后的一組數(shù)據(jù)進(jìn)行操作,我們使用的方法是dfgroup.get_group()
我們來看個(gè)例子
我們使用dfg.get_group(“概率統(tǒng)計(jì)”)就可以獲取到所有學(xué)概率統(tǒng)計(jì)課程的學(xué)生,我們也可以針對某一組數(shù)據(jù)進(jìn)行描述。
我們使用group分組后的數(shù)據(jù)可以按照需求進(jìn)行匯總。匯總我們使用的函數(shù)是df.aggregete()可以簡寫成agg,可以用axis指定匯總維度。也可以直接使用匯總函數(shù)。
匯總函數(shù)如下:
接下來我們看一個(gè)示例:
我們對分組后數(shù)據(jù)的最大值進(jìn)行匯總。
我們還可以對分組后的某列進(jìn)行匯總
如果我們有其他需求,我們也可以自定義匯總函數(shù)或者傳遞numpy函數(shù)。
Pandas還支持創(chuàng)建數(shù)據(jù)透視表,它可以幫助我們更直觀地展示分組后的數(shù)據(jù)。我們構(gòu)建數(shù)據(jù)透視表使用pivot_table其語法如下:
讓我們看一個(gè)例子:
import pandas as pd
# 創(chuàng)建一個(gè)示例DataFrame
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
'Value': [10, 20, 15, 25, 30, 35]}
df = pd.DataFrame(data)
print(df)
grouped = df.groupby('Category')
# 創(chuàng)建數(shù)據(jù)透視表,以Category為行,以Value為列,計(jì)算平均值
pivot_table =pd.pivot_table(df, index='Category', values='Value', aggfunc='max')
print(pivot_table)
在數(shù)據(jù)分組過程中,我們還可以進(jìn)行過濾和轉(zhuǎn)換操作。比如,我們可以過濾掉某些分組,或者對每個(gè)分組的數(shù)據(jù)進(jìn)行轉(zhuǎn)換。下面是一個(gè)示例:
以上代碼展示了如何通過filter
函數(shù)過濾出總和大于30的分組,以及如何使用transform
函數(shù)對每個(gè)分組的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理。
Pandas的數(shù)據(jù)分組功能為數(shù)據(jù)分析提供了強(qiáng)大的支持。無論是簡單的聚合操作還是復(fù)雜的多列分組,Pandas都能輕松勝任。通過本文的介紹,希望大家能夠更好地理解和運(yùn)用Pandas中的數(shù)據(jù)分組技巧,從而更加高效地進(jìn)行數(shù)據(jù)分析工作。記得多多練習(xí),掌握這些技能,讓數(shù)據(jù)在你手中展現(xiàn)出更多的價(jià)值!????
就在這里,我們對Pandas中數(shù)據(jù)分組的探索就告一段落了。希望這篇推文能夠幫助到你,謝謝大家的閱讀!如果你有任何問題或者想要了解更多,請隨時(shí)留言。一起加油,成為數(shù)據(jù)分析的高手吧!????
[附帶清晰的代碼示例和實(shí)用技巧,這篇推文希望能夠幫助讀者更好地理解如何在Pandas中進(jìn)行數(shù)據(jù)分組,從而為數(shù)據(jù)分析提供更有力的支持。通過實(shí)際代碼示例,讀者可以更加直觀地掌握這一重要技能,為實(shí)際工作中的數(shù)據(jù)處理和分析提供幫助。]