大中間的,今天還這麼熱bash
5月份,36度的高溫函數
天空飄過幾個字spa
屋裏學pandas最得勁 3d
說白了就是經過index和columns混合分組code
例子走起,(不趕忙寫例子,都不知道要怎麼解釋啦)cdn
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)
複製代碼
有例子,就有例子展現,對吧blog
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列進行分組three
代碼先行一步,效果稍後就來圖片
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
的哦~
迷糊了吧,迷糊也沒事,拿的住手機就行
拍這裏,拍這個裏