爲啥同樣啊,由於要肝的python
你看,學編程有不少好處sql
掉頭髮,有藉口吧 不洗頭,有藉口吧
不洗襪子,有藉口吧 不去看電影,有藉口吧 不陪女友,有藉口吧數據庫
活該單身, (❁´◡`❁)✲゚編程
哈哈,惟獨夢想橡皮擦,她就比較厲害了,數組
身邊的大佬全是綜上所述,嘿嘿嘿bash
大週一的,弄點啥?數據結構
遙記得,上一篇最後,我說要寫groupby的高級函數app
後來本身理了理,突然以爲真難函數
不想了寫了... ...學習
後來,轉念一想,不行啊,我是大佬啊
咋能不寫
因而乎,我就寫了今天這篇博客
啥意思呢,就是字面意思唄
分割-應用-組合
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']
好了,今天肝不動了
明天咱們繼續吧
趕忙讓朋友也關注啊…