大中間的,今天還這麼熱函數
5月份,36度的高溫.net
天空飄過幾個字3d
屋裏學pandas最得勁
code
說白了就是經過index和columns混合分組blog
例子走起,(不趕忙寫例子,都不知道要怎麼解釋啦)索引
import pandas as pd arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] index = pd.MultiIndex.from_arrays(arrays=arrays,names=['first','second']) df = pd.DataFrame({'A':[3,1,4,5,9,2,6,1], 'B':[1,1,1,1,2,2,3,3]},index=index) print(df)
有例子,就有例子展現,對吧three
A B first second bar one 3 1 two 1 1 baz one 4 1 two 5 1 foo one 9 2 two 2 2 qux one 6 3 two 1 3
接下來,大招展現的環節的圖片
我要按照second的index索引和B列進行分組get
代碼先行一步,效果稍後就來博客
grouped = df.groupby([pd.Grouper(level=1),'B']).sum() print(grouped)
注意看到groupby裏面有兩個值,一個是pd.Grouper(level=1)
這個爲second的index
第二個爲B columns
手太抖了,沒畫好,靈魂畫手
主要就是爲了讓你看明白,分組是怎麼計算的哦~
固然,你也能夠經過index的名字進行分組
df.groupby([pd.Grouper(level='second'), 'A']).sum()
和上面的效果是同樣同樣的
甚至,咱們能夠直接簡寫成
df.groupby(['second', 'A']).sum()
這個部分,其實咱們已經實現過了
再拿出來,重溫一下
df = pd.DataFrame({'A':['bar', 'bar', 'foo', 'foo', 'foo', 'foo', 'foo'], 'B':['one', 'two', 'one', 'two', 'one', 'two', 'three'], 'C':[3,1,4,5,9,2,6], 'D':[1,1,1,1,2,2,3]}) print(df) grouped = df.groupby('A') for name,group in grouped: print(name) print(group)
看到分組的名字分別是bar和foo,熟悉吧,常規操做
迭代的時候,用for in 循環便可
bar A B C D 0 bar one 3 1 1 bar two 1 1 foo A B C D 2 foo one 4 1 3 foo two 5 1 4 foo one 9 2 5 foo two 2 2 6 foo three 6 3
若是按照多keys分組,例如groupby(['A','B'])
它會天然而然的造成一個元組name
能夠迭代,就能夠部分選擇,上篇博客有哦!
bars = grouped.get_group('bar') # 經過分組的名字 print(bars)
另外一個呢?
df.groupby(['A', 'B']).get_group(('bar', 'one'))
唉,對嘍,這麼寫,就比較對了
首先看一下內置的聚合函數
sum(), mean(), max(), min(), count(), size(), describe()
居然才這麼幾個,那是由於我沒寫全
這個我們已經操做不少次了
接下來能夠看一個高級一些的
可自定義函數,傳入agg方法中
咱們仍是經過剛纔的數據進行分析
A B C D 0 bar one 3 1 1 bar two 1 1 2 foo one 4 1 3 foo two 5 1 4 foo one 9 2 5 foo two 2 2 6 foo three 6 3
按照A和B進行分組
A有2個值,B有3個值,因此分組以後造成5組
看清楚,不要眨眼,操做來了
grouped = df.groupby(['A','B']) print(grouped.agg('mean'))
思路轉換,單列求平均值
grouped = df.groupby(['A','B']) print(grouped['C'].agg('mean'))
繼續思路轉換,給單列多個聚合函數
print(grouped['C'].agg(['mean','sum']))
很厲害,學到了吧
繼續來,不要怕,求多種聚合運算的同時更改列名
print(grouped['C'].agg([('A','mean'),('B','max')]))
不一樣的列運用不一樣的聚合函數
print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))
這些都是agg乾的,我還能夠繼續編哦~
groupby中,能夠修改爲無索引形式
注意核心加了一個參數as_index=False
grouped = df.groupby(['A','B'],as_index=False) print(grouped.agg({'C':['sum','mean'],'D':['min','max']}))
通常,都是這個案例,我呢,固然不能例外啦
grouped = df.groupby('A') def max_min(group): return group.max()-group.min() print(grouped.agg(max_min))
agg(自定義的函數)
這個地方的自定義函數,還支持lambda
的哦~
迷糊了吧,迷糊也沒事,拿的住手機就行
拍這裏,拍這個裏