<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
專案github地址:bitcarmanlee easy-algorithm-interview-and-practice
歡迎大家star,留言,一起學習進步
在日常資料分析過程中,經常有分組的需求。具體來說,就是根據一個或者多個欄位,將資料劃分為不同的組,然後進行進一步分析,比如求分組的數量,分組內的最大值最小值平均值等。在sql中,就是大名鼎鼎的groupby操作。
pandas中,也有對應的groupby操作,下面我們就來看看pandas中的groupby怎麼使用。
首先我們看如下程式碼
def ddd(): levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"] nums = [10, 20, 30, 20, 15, 10, 12] df = pd.DataFrame({"level": levels, "num": nums}) g = df.groupby('level') print(g) print() print(list(g))
輸出結果如下:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x10f6f96d0>
[('L1', level num
0 L1 10
1 L1 20
2 L1 30), ('L2', level num
3 L2 20
4 L2 15), ('L3', level num
5 L3 10
6 L3 12)]
做groupby操作以後,得到的是一個DataFrameGroupBy物件,直接列印該物件的話,顯示的是其記憶體地址。
為了方便地觀察資料,我們使用list方法轉換一下,發現其是一個元組,元組中的第一個元素,是level的值。元祖中的第二個元素,則是其組別下的整個dataframe。
3.groupby的基本用法
def group1(): levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"] nums = [10, 20, 30, 20, 15, 10, 12] scores = [100, 200, 300, 200, 150, 100, 120] df = pd.DataFrame({"level": levels, "num": nums, "score": scores}) result = df.groupby('level').agg({'num': 'sum', 'score': 'mean'}) allnum = result['num'].sum() result['rate'] = result['num'].map(lambda x: x / allnum) print(result)
最後輸出:
num score rate
level
L1 60 200 0.512821
L2 35 175 0.299145
L3 22 110 0.188034
上面的例子展示了groupby的基本用法。
對dataframe按照level分組,然後對num列求和,對score列求平均值,可以得到result。
同時,我們還希望得到每個分組中,num的和在所有num和中的佔比。於是我們先求num的綜合,然後在用map方法,給result新增一列,求得其佔比!
下面我們看一個更復雜的例子。
def t10(): levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"] nums = [10, 20, 30, 20, 15, 10, 12] df = pd.DataFrame({"level": levels, "num": nums}) ret = df.groupby('level')['num'].mean().to_dict() df['avg_num'] = df['level'].map(ret) print(ret) print(df)
{'L1': 20.0, 'L2': 17.5, 'L3': 11.0} level num avg_num 0 L1 10 20.0 1 L1 20 20.0 2 L1 30 20.0 3 L2 20 17.5 4 L2 15 17.5 5 L3 10 11.0 6 L3 12 11.0
上面的方法,我們對level分組以後,我們想給資料集新增一列,想給每行資料新增每個level對應的平均值。
上面的解法是先求得每個分組的平均值,轉成一個dict,然後再使用map方法將每組的平均值新增上去。
def trans(): levels = ["L1", "L1", "L1", "L2", "L2", "L3", "L3"] nums = [10, 20, 30, 20, 15, 10, 12] df = pd.DataFrame({"level": levels, "num": nums}) df['avg_num'] = df.groupby('level')['num'].transform('mean') print(df)
如果使用transform方法,程式碼可以更簡單更直觀,如上所示。
transform方法的作用:呼叫函數在每個分組上產生一個與原df相同索引的dataFrame,整體返回與原來物件擁有相同索引且已填充了轉換後的值的dataFrame,相當於就是給原來的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