<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
熟練掌握pandas中的groupby操作
groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False)
引數說明:
grouping操作(split-apply-combine)
資料的分組&聚合 – 什麼是groupby 技術?
在資料分析中,我們往往需要在將資料拆分,在每一個特定的組裡進行運算。比如根據教育水平和年齡段計算某個城市的工作人口的平均收入。
pandas中的groupby提供了一個高效的資料的分組運算。
我們通過一個或者多個分類變數將資料拆分,然後分別在拆分以後的資料上進行需要的計算
我們可以把上述過程理解為三部:
1.拆分資料(split)
2.應用某個函數(apply)
3.彙總計算結果(aggregate)
下面這個演示圖展示了“分拆-應用-彙總”的groupby思想
上圖所示,分解步驟:
Step1 :資料分組—— groupby 方法
Step2 :資料聚合:
使用內建函數——sum / mean / max / min / count等
使用自定義函數—— agg ( aggregate ) 方法
自定義更豐富的分組運算—— apply 方法
Python 3.6.1
Jupyter
練習pandas中的groupby的操作案例
1.建立一個資料框df。
import numpy as np import pandas as pd df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)}) print(df)
2.通過A列對df進行分佈操作。
df.groupby('A')
3.通過A、B列對df進行分組操作。
df.groupby(['A','B'])
4…使用自定義函數進行分組操作,自定義一個函數,使用groupby方法並使用自定義函數給定的條件,按列對df進行分組。
def get_letter_type(letter): if letter.lower() in 'aeiou': return 'vowel' else: return 'consonant' grouped = df.groupby(get_letter_type, axis=1) for group in grouped: print(group)
5.建立一個Series名為s,使用groupby根據s的索引對s進行分組,返回分組後的新Series,對新Series進行first、last、sum操作。
lst = [1, 2, 3, 1, 2, 3] s = pd.Series([1, 2, 3, 10, 20, 30], lst) grouped = s.groupby(level=0) #檢視分組後的第一行資料 grouped.first() #檢視分組後的最後一行資料 grouped.last() #對分組的各組進行求和 grouped.sum()
6.分組排序,使用groupby進行分組時,預設是按分組後索引進行升序排列,在groupby方法中加入sort=False引數,可以進行降序排列。
df2=pd.DataFrame({'X':['B','B','A','A'],'Y':[1,2,3,4]}) #按X列對df2進行分組,並求每組的和 df2.groupby(['X']).sum() #按X列對df2進行分組,分組時不對鍵進行排序,並求每組的和 df2.groupby(['X'],sort=False).sum()
7.使用get_group方法得到分組後某組的值。
df3 = pd.DataFrame({'X' : ['A', 'B', 'A', 'B'], 'Y' : [1, 4, 3, 2]}) #按X列df3進行分組,並得到A組的df3值 df3.groupby(['X']).get_group('A') #按X列df3進行分組,並得到B組的df3值 df3.groupby(['X']).get_group('B')
8.使用groups方法得到分組後所有組的值。
df.groupby('A').groups df.groupby(['A','B']).groups
9.多級索引分組,建立一個有兩級索引的Series,並使用兩個方法對Series進行分組並求和。
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] index=pd.MultiIndex.from_arrays(arrays,names=['first','second']) s=pd.Series(np.random.randn(8),index=index) s.groupby(level=0).sum() s.groupby(level='second').sum()
10.複合分組,對s按first、second進行分組並求和。
s.groupby(level=['first', 'second']).sum()
11.複合分組(按索引和列),建立資料框df,使用索引級別和列對df進行分組。
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second']) df = pd.DataFrame({'A': [1, 1, 1, 1, 2, 2, 3, 3], 'B': np.arange(8)},index=index) print(df) df.groupby([pd.Grouper(level=1),'A']).sum()
12.對df進行分組,將分組後C列的值賦值給grouped,統計grouped中每類的個數。
df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],'B' : ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],'C' : np.random.randn(8),'D' : np.random.randn(8)}) grouped=df.groupby(['A']) grouped_C=grouped['C'] print(grouped_C.count())
13.對上面建立的df的C列,按A列值進行分組並求和。
df['C'].groupby(df['A']).sum()
14.遍歷分組結果,通過A,B兩列對df進行分組,分組結果的組名為元組。
for name, group in df.groupby(['A', 'B']): print(name) print(group)
15.通過A列對df進行分組,並檢視分組物件的bar列。
df.groupby(['A']).get_group(('bar'))
16.按A,B兩列對df進行分組,並檢視分組物件中bar、one都存在的部分。
df.groupby(['A','B']).get_group(('bar','one'))
注意:當分組按兩列來分時,檢視分組物件也應該包含每列的一部分。
17.聚合操作,按A列對df進行分組,使用聚合函數aggregate求每組的和。
grouped=df.groupby(['A']) grouped.aggregate(np.sum)
按A、B兩列對df進行分組,並使用聚合函數aggregate對每組求和。
grouped=df.groupby(['A']) grouped.aggregate(np.sum)
注意:通過上面的結果可以看到。聚合完成後每組都有一個組名作為新的索引,使用as_index=False可以忽略組名。
18.當as_index=True時,在groupby中使用的鍵將成為新的dataframe中的索引。按A、B兩列對df進行分組,這是使引數as_index=False,再使用聚合函數aggregate求每組的和.
grouped=df.groupby(['A','B'],as_index=False) grouped.aggregate(np.sum)
19.聚合操作,按A、B列對df進行分組,使用size方法,求每組的大小。返回一個Series,索引是組名,值是每組的大小。
grouped=df.groupby(['A','B']) grouped.size()
20.聚合操作,對分組grouped進行統計描述。
grouped.describe()
注意:聚合函數可以減少資料框的維度,常用的聚合函數有:mean、sum、size、count、std、var、sem 、describe、first、last、nth、min、max。
執行多個函數在一個分組結果上:在分組返回的Series中我們可以通過一個聚合函數的列表或一個字典去操作series,返回一個DataFrame。
到此這篇關於pandas中groupby操作實現的文章就介紹到這了,更多相關pandas groupby操作內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45