週一不睡覺,也要把pandas groupy 肝完,你該這麼學,No.8

學編程就跟打遊戲同樣同樣的

爲啥同樣啊,由於要肝的python

你看,學編程有不少好處sql

掉頭髮,有藉口吧 不洗頭,有藉口吧
不洗襪子,有藉口吧 不去看電影,有藉口吧 不陪女友,有藉口吧數據庫

活該單身, (❁´◡`❁)✲゚編程

哈哈,惟獨夢想橡皮擦,她就比較厲害了,數組

身邊的大佬全是綜上所述,嘿嘿嘿bash

在這裏插入圖片描述

學個pandas在不找點樂趣,咋學啊

大週一的,弄點啥?數據結構

遙記得,上一篇最後,我說要寫groupby的高級函數app

後來本身理了理,突然以爲真難函數

不想了寫了... ...學習

在這裏插入圖片描述

後來,轉念一想,不行啊,我是大佬啊

咋能不寫

因而乎,我就寫了今天這篇博客

groupby 核心爲 split-apply-combine

啥意思呢,就是字面意思唄

分割-應用-組合

在這裏插入圖片描述

  • 分割,就是按照一些標準進行數據的拆分
  • 應用,給分好的組,應用一些函數上去
  • 組合,分組的數據,搗鼓搗鼓,弄成一個新的數據結構,方便後面應用

Over

這就是groupby的核心

分割,或者叫分組(拆分)步驟,是最簡單的, 看好數據,寫代碼就能夠了 (說的好像很容易似的)

使用最多的,對咱們來講 是想要對數據進行一些基本的應用

也就是分組以後,咱們要計算

官方文檔裏面介紹groupby要實現的效果

就是想模擬SQL的操做

SQL是啥?數據庫的那個腳本語言(你不會不會寫吧,哈哈哈O(∩_∩)O哈哈~)

groupby在模仿的就是下面這句話

select col1,col2,count(col3),sum(col4) from one_table
group by col1,col2
複製代碼

咦,若是你看到上面的SQL語句

發現,這個我熟悉啊

那麼接下來,學習就easy了

固然,若是你不是很清楚 那就要看你的悟性了

在這裏插入圖片描述

將一個dataframe對象分割成組

其實這個咱上篇文章已經作過了

再學一次,沒毛病

舉個代碼的例子

import pandas as pd
df = pd.DataFrame([('class1','boy',100),
                   ('class2', 'boy', 90),
                   ('class3', 'girl', 80),
                   ('class1', 'unkown', None),
                   ('class2', 'unkown', 90)],index=['dawa','erwa','sanwa','siwa','wuwa'],columns=['class','sex','weight'])

print(df)
複製代碼

看着迷糊麼? 我其實就是作了這麼一個表格

咱去excel裏面瞅瞅

在這裏插入圖片描述

pandas裏面打印的無非是英文

class     sex  weight
dawa   class1     boy   100.0
erwa   class2     boy    90.0
sanwa  class3    girl    80.0
siwa   class1  unkown     NaN
wuwa   class2  unkown    90.0
複製代碼

同樣的,接下來,基本操做

走位,走位,瞬間清晰

在這裏插入圖片描述

print(df.groupby('class'))
print(df.groupby('sex',axis='columns'))
print(df.groupby(['class','sex']))

複製代碼

第一個,你確定會 第二個,修改axis的軸,按照columns進行分組了,先不用管有沒有意義哦 第三個,請注意,有兩個列名在一個數組裏面,叫作先按照class分組,在按照sex分組

那麼groupby裏面能夠給哪些值呢?

難不成只有上面的三種

天真了吧

看操做

  1. 給一個python函數,能夠做用於每個目標軸標籤上,很差理解
  2. list列表或者numpy的數組,長度和被選擇的軸一致
  3. 字典或者Series,格式參照 label->group name
  4. 提供一個字符串,好比df.groupby('A')df.groupby(df['A']) 是同樣的
  5. 上面任意一條,構成的list列表

好了,難吧

在這裏插入圖片描述

沒錯,說了,從這篇博客開始就開始高級部分學習了

嘿嘿

簡單的多列分組代碼代碼以下

df = pd.DataFrame({'A': ['girl', 'boy', 'girl', 'boy',
                         'girl', 'boy', 'girl', 'girl'],
                   'B': ['one', 'one', 'two', 'three',
                         'two', 'two', 'one', 'three'],
                   'C': [3,1,4,5,6,7,8,1],
                   'D': [9,1,2,3,1,6,4,3]})

print(df)

grouped = df.groupby('A')
print(grouped)
grouped = df.groupby(['A','B'])
print(grouped)

複製代碼

對於一個待分組的dataframe對象來講 你能夠直接用'A'或者'B'中的一個進行分組 固然也能夠直接用['A','B']進行分組

這個要看你實際的需求了啊

分組以後,咱們能幹點啥?

固然是獲取分組以後的數據啊

print(grouped.get_group('boy'))
print(grouped.get_group('girl'))
複製代碼

小函數,送上一枚

get_group('key name')

除了獲取分組以後的數據,在送你個經常使用小屬性,瞅瞅

grouped = df.groupby('A')
print(grouped)
print(grouped.groups)
複製代碼

groups這個屬性很是經常使用哦~由於咱們時常須要看一下,分組結果是否爭取e

{'boy': Int64Index([1, 3, 5], dtype='int64'), 'girl': Int64Index([0, 2, 4, 6, 7], dtype='int64')}
複製代碼

固然學習嗎,你可使用help和dir把幫助文檔彈出來 而後全部的屬性和方法都清晰可見了

print(dir(grouped))
print(help(grouped))
複製代碼

到最後了,我在嘚啵一個知識點,這個知識點是series的

爲何又返回來,開始學習series了呢

還不是由於直接學習dataframe的多列分組,難度太大

在這裏插入圖片描述

咱們先弄一個完美的測試栗子

arrays = [['a', 'a', 'b', 'b', 'c', 'c', 'd', 'd'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]


index = pd.MultiIndex.from_arrays(arrays=arrays,names=['first','second'])

s = pd.Series([3,1,4,1,5,9,2,6],index=index)

print(s)
複製代碼

這個series長成這個樣子

first  second
a      one       3
       two       1
b      one       4
       two       1
c      one       5
       two       9
d      one       2
       two       6
dtype: int64
複製代碼

必定要看明白,是分級索引哦

接下來對它進行分組,而且求和

好比,我要計算first列下面的a的和,b的和,c的和,d的和

咱們能夠經過level參數控制

# 這兩個一個意思
print(s.groupby(level=0))
print(s.groupby(level='first'))
複製代碼
grouped = s.groupby(level=0)
print(grouped.sum())
複製代碼

搞定,看看結果

沒毛病

對於second列,咱們也能夠分組求和的哦

在這裏插入圖片描述

grouped = s.groupby(level='second')
print(grouped.sum())
複製代碼

咦,好像發現點問題

print("分組求和")
grouped = s.groupby(level='second')
print(grouped.sum())
print("sum函數求和")

print(s.sum(level='second'))

複製代碼

在這裏插入圖片描述

同樣唉~

其實參數level也能夠這麼寫呢level=['first','second']

好了,今天肝不動了

明天咱們繼續吧

在這裏插入圖片描述

你已經關注我公主號了,對不對

趕忙讓朋友也關注啊…

在這裏插入圖片描述
相關文章
相關標籤/搜索