爲啥同樣啊,由於要肝的python
你看,學編程有不少好處sql
掉頭髮,有藉口吧
不洗頭,有藉口吧
不洗襪子,有藉口吧
不去看電影,有藉口吧
不陪女友,有藉口吧數據庫
活該單身, (❁´◡`❁)✲゚編程
哈哈,惟獨夢想橡皮擦,她就比較厲害了,數組
身邊的大佬全是綜上所述,嘿嘿嘿數據結構
大週一的,弄點啥?app
遙記得,上一篇最後,我說要寫groupby的高級函數函數
後來本身理了理,突然以爲真難學習
不想了寫了... ...測試
後來,轉念一想,不行啊,我是大佬啊
咋能不寫
因而乎,我就寫了今天這篇博客
啥意思呢,就是字面意思唄
分割-應用-組合
Over
這就是groupby的核心
分割,或者叫分組(拆分)步驟,是最簡單的,
看好數據,寫代碼就能夠了
(說的好像很容易似的)
使用最多的,對咱們來講
是想要對數據進行一些基本的應用
也就是分組以後,咱們要計算
官方文檔裏面介紹groupby要實現的效果
就是想模擬SQL
的操做
SQL是啥?數據庫的那個腳本語言(你不會不會寫吧,哈哈哈O(∩_∩)O哈哈~)
groupby在模仿的就是下面這句話
select col1,col2,count(col3),sum(col4) from one_table group by col1,col2
咦,若是你看到上面的SQL語句
發現,這個我熟悉啊
那麼接下來,學習就easy了
固然,若是你不是很清楚
那就要看你的悟性了
其實這個咱上篇文章已經作過了
再學一次,沒毛病
舉個代碼的例子
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裏面能夠給哪些值呢?
難不成只有上面的三種
天真了吧
看操做
df.groupby('A')
和 df.groupby(df['A'])
是同樣的好了,難吧
沒錯,說了,從這篇博客開始就開始高級部分學習了
嘿嘿
簡單的多列分組代碼代碼以下
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了呢
還不是由於直接學習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']
好了,今天肝不動了
明天咱們繼續吧
趕忙讓朋友也關注啊…