破週三,前不着村後不着店的,只好學pandas了,你該這麼學,No.9

若是圖片沒法觀看,請移步 https://blog.csdn.net/hihell

週三了,一個星期最難的一天

大中間的,今天還這麼熱函數

5月份,36度的高溫.net

天空飄過幾個字3d

屋裏學pandas最得勁
在這裏插入圖片描述code

Groupy DataFrame with Index Levels and Columns

說白了就是經過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']}))

在這裏插入圖片描述

最後一個操做,agg裏面是可使用自定義的聚合函數

通常,都是這個案例,我呢,固然不能例外啦

grouped = df.groupby('A')

def max_min(group):
    return group.max()-group.min()

print(grouped.agg(max_min))

agg(自定義的函數)

這個地方的自定義函數,還支持lambda的哦~

在這裏插入圖片描述

迷糊了吧,迷糊也沒事,拿的住手機就行

拍這裏,拍這個裏

在這裏插入圖片描述

相關文章
相關標籤/搜索