Pandas是一個強大的數據分析工具,可以用來處理大量的數據,包括分組,匯總和統計等。當面對大量的數據時,經常需要按照特定的標準對數據進行分組,然後對每個組進行統計分析,這時候就需要用到Pandas的分組統計功能。下面將會從多個方面對Pandas分組統計進行詳細闡述。
一、分組
在對數據進行統計時,經常需要將數據進行分組,以便於進行更加精細的統計。在Pandas中,可以使用groupby()函數進行分組,它的基本語法是:
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
其中,參數by表示按照哪列或者哪些列進行分組,也可以是一個函數;axis表示運算軸向,默認為0表示行方向,1表示列方向;level表示按照哪個級別進行分組,多重索引時使用;as_index表示是否以分組列為索引;sort表示分組後是否對結果進行排序;group_keys表示是否總是返回分組鍵作為一級索引;squeeze表示是否對單層索引進行降維操作。
下面是一個通過年齡對數據進行分組的代碼示例:
import pandas as pd data = { 'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Tom'], 'Age': [28, 34, 29, 42, 23], 'Country': ['US', 'UK', 'UK', 'US', 'US']} df = pd.DataFrame(data) print(df.groupby('Age').groups)
上述代碼中,通過groupby()函數按照年齡對數據進行分組,結果打印出各個分組中的索引。
二、匯總
分組完成後,接下來就是匯總統計了。Pandas提供了多種匯總統計方法,包括計數、求和、均值、方差、標準差、最小值和最大值等。
下面是一些常見的匯總統計方法:
- count(): 統計每個分組中非空值的數量
- sum(): 統計每個分組中數值的總和
- mean(): 統計每個分組中數值的平均值
- median(): 統計每個分組中數值的中位數
- std(): 統計每個分組中數值的標準差
- var(): 統計每個分組中數值的方差
- min(): 統計每個分組中數值的最小值
- max(): 統計每個分組中數值的最大值
下面是一個對數據進行匯總統計的代碼示例:
import pandas as pd data = { 'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Tom'], 'Age': [28, 34, 29, 42, 23], 'Country': ['US', 'UK', 'UK', 'US', 'US']} df = pd.DataFrame(data) print(df.groupby('Country')['Age'].agg(['count', 'sum', 'mean', 'std', 'min', 'max']))
上述代碼中,按照國家進行分組,並統計各個分組中年齡的count、sum、mean、std、min和max等匯總統計信息。
三、過濾
在進行數據分析時,我們常常需要篩選出滿足某些特定條件的數據,這時候就需要用到過濾功能。在Pandas中,可以使用filter()函數進行過濾,其基本語法是:
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs).filter(func, dropna=True)
其中,參數func表示用來進行篩選的函數,其返回值必須是True或False值;dropna表示是否刪除含有缺失值的行,默認為True。
下面是一個對數據進行過濾的代碼示例:
import pandas as pd data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Tom'], 'Age': [28, 34, 29, 42, 23], 'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shanghai', 'Beijing']} df = pd.DataFrame(data) df_filtered = df.groupby('City').filter(lambda x: len(x) >= 2) print(df_filtered)
上述代碼中,按照城市進行分組,然後使用filter()函數對分組後的數據進行過濾,選取城市出現次數大於等於2次的數據,最後打印輸出篩選後的數據。
四、轉換
數據轉換是指在不改變數據結構的前提下,修改數據的值。在Pandas中,可以使用transform()函數進行轉換,其基本語法是:
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs).transform(func, axis=0)
其中,參數func表示用來進行轉換的函數;axis表示運算軸向,默認為0表示列方向,1表示行方向。
下面是一個對數據進行轉換的代碼示例:
import pandas as pd data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Tom'], 'Age': [28, 34, 29, 42, 23], 'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shanghai', 'Beijing']} df = pd.DataFrame(data) df['Age'] = df.groupby('City')['Age'].transform(lambda x: x.mean()) print(df)
上述代碼中,按照城市進行分組,然後使用transform()函數對分組後的數據進行轉換,將年齡列的值改為每個城市年齡的均值,最後打印輸出轉換後的數據。
五、應用
應用是指對分組後的數據進行操作,如刪除某些行、替換某些值等。在Pandas中,可以使用apply()函數進行操作,其基本語法是:
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs).apply(func, *args, **kwargs)
其中,參數func表示進行操作的函數;*args和**kwargs分別表示傳遞給函數的位置參數和關鍵字參數。
下面是一個對數據進行應用的代碼示例:
import pandas as pd data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky', 'Tom'], 'Age': [28, 34, 29, 42, 23], 'City': ['Beijing', 'Shanghai', 'Guangzhou', 'Shanghai', 'Beijing']} df = pd.DataFrame(data) df.groupby('City').apply(lambda x: x.sort_values(by='Age', ascending=False)[:2]).reset_index(drop=True) print(df)
上述代碼中,按照城市進行分組,然後使用apply()函數對分組後的數據進行操作,選出每個城市中年齡最大的兩個人,並將結果進行合併。最後打印輸出應用後的數據。
六、總結
本文對Pandas分組統計進行了詳細的闡述,主要涉及到分組、匯總、過濾、轉換和應用等不同方面。在實際應用中,可以根據具體需求採取不同的方法進行數據分析和處理。希望本文可以為讀者提供一些參考和幫助。
原創文章,作者:XDGXH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372053.html