pandas提供了一個靈活高效的groupby功能,它使你能以一種自然的方式對數(shù)據(jù)集進(jìn)行切片、切塊、摘要等操作。根據(jù)一個或多個鍵(可以是函數(shù)、數(shù)組或DataFrame列名)拆分pandas對象。計算分組摘要統(tǒng)計,如計數(shù)、平均值、標(biāo)準(zhǔn)差,或用戶自定義函數(shù)。對DataFrame的列應(yīng)用各種各樣的函數(shù)。應(yīng)用組內(nèi)轉(zhuǎn)換或其他運(yùn)算,如規(guī)格化、線性回歸、排名或選取子集等。計算透視表或交叉表。執(zhí)行分位數(shù)分析以及其他分組分析。
groupby分組函數(shù):
返回值:返回重構(gòu)格式的DataFrame,特別注意,groupby里面的字段內(nèi)的數(shù)據(jù)重構(gòu)后都會變成索引
groupby(),一般和sum()、mean()一起使用,如下例:
先自定義生成數(shù)組
import pandas as pddf = pd.DataFrame({'key1':list('ababa'), 'key2': ['one','two','one','two','one'], 'data1': np.random.randn(5), 'data2': np.random.randn(5)})print(df) data1 data2 key1 key20 -1.313101 -0.453361 a one1 0.791463 1.096693 b two2 0.462611 1.150597 a one3 -0.216121 1.381333 b two4 0.077367 -0.282876 a one
應(yīng)用groupby,分組鍵均為Series(譬如df[‘xx']),實(shí)際上分組鍵可以是任何長度適當(dāng)?shù)臄?shù)組
#將df['data1']按照分組鍵為df['key1']進(jìn)行分組grouped=df['data1'].groupby(df['key1'])print(grouped.mean())key1a -0.257707b 0.287671Name: data1, dtype: float64states=np.array(['Ohio','California','California','Ohio','Ohio'])years=np.array([2005,2005,2006,2005,2006])#states第一層索引,years第二層分層索引print(df['data1'].groupby([states,years]).mean())California 2005 0.791463 2006 0.462611Ohio 2005 -0.764611 2006 0.077367Name: data1, dtype: float64#df根據(jù)‘key1'分組,然后對df剩余數(shù)值型的數(shù)據(jù)運(yùn)算df.groupby('key1').mean() data1 data2key1 a -0.257707 0.138120b 0.287671 1.239013#可以看出沒有key2列,因?yàn)閐f[‘key2']不是數(shù)值數(shù)據(jù),所以被從結(jié)果中移除。默認(rèn)情況下,所有數(shù)值列都會被聚合,雖然有時可能被過濾為一個子集。
對分組進(jìn)行迭代
#name就是groupby中的key1的值,group就是要輸出的內(nèi)容for name, group in df.groupby('key1'): print (name,group)a data1 data2 key1 key20 -1.313101 -0.453361 a one2 0.462611 1.150597 a one4 0.077367 -0.282876 a oneb data1 data2 key1 key21 0.791463 1.096693 b two3 -0.216121 1.381333 b two
對group by后的內(nèi)容進(jìn)行操作,可轉(zhuǎn)換成字典
#轉(zhuǎn)化為字典piece=dict(list(df.groupby('key1'))){'a': data1 data2 key1 key2 0 -1.313101 -0.453361 a one 2 0.462611 1.150597 a one 4 0.077367 -0.282876 a one, 'b': data1 data2 key1 key2 1 0.791463 1.096693 b two 3 -0.216121 1.381333 b two}#對字典取值value = piece['a']
groupby默認(rèn)是在axis=0上進(jìn)行分組的,通過設(shè)置也可以在其他任何軸上進(jìn)行分組
grouped=df.groupby(df.dtypes, axis=1)value = dict(list(grouped))print(value){dtype('float64'): data1 data20 -1.313101 -0.4533611 0.791463 1.0966932 0.462611 1.1505973 -0.216121 1.3813334 0.077367 -0.282876, dtype('O'): key1 key20 a one1 b two2 a one3 b two4 a one}
新聞熱點(diǎn)
疑難解答
圖片精選