欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

pandas?groupby?用法實(shí)例詳解

 更新時間:2022年11月24日 09:48:31   作者:bitcarmanlee  
在日常數(shù)據(jù)分析過程中,經(jīng)常有分組的需求。具體來說,就是根據(jù)一個或者多個字段,將數(shù)據(jù)劃分為不同的組,然后進(jìn)行進(jìn)一步分析,比如求分組的數(shù)量,分組內(nèi)的最大值最小值平均值等,下面我們就來看看pandas中的groupby怎么使用,需要的朋友可以參考下

項目github地址:bitcarmanlee easy-algorithm-interview-and-practice
歡迎大家star,留言,一起學(xué)習(xí)進(jìn)步

1.分組groupby

在日常數(shù)據(jù)分析過程中,經(jīng)常有分組的需求。具體來說,就是根據(jù)一個或者多個字段,將數(shù)據(jù)劃分為不同的組,然后進(jìn)行進(jìn)一步分析,比如求分組的數(shù)量,分組內(nèi)的最大值最小值平均值等。在sql中,就是大名鼎鼎的groupby操作。
pandas中,也有對應(yīng)的groupby操作,下面我們就來看看pandas中的groupby怎么使用。

2.groupby的數(shù)據(jù)結(jié)構(gòu)

首先我們看如下代碼

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))

輸出結(jié)果如下:

<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對象,直接打印該對象的話,顯示的是其內(nèi)存地址。
為了方便地觀察數(shù)據(jù),我們使用list方法轉(zhuǎn)換一下,發(fā)現(xiàn)其是一個元組,元組中的第一個元素,是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添加一列,求得其占比!

4.transform的用法

下面我們看一個更復(fù)雜的例子。

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分組以后,我們想給數(shù)據(jù)集添加一列,想給每行數(shù)據(jù)添加每個level對應(yīng)的平均值。
上面的解法是先求得每個分組的平均值,轉(zhuǎn)成一個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方法的作用:調(diào)用函數(shù)在每個分組上產(chǎn)生一個與原df相同索引的dataFrame,整體返回與原來對象擁有相同索引且已填充了轉(zhuǎn)換后的值的dataFrame,相當(dāng)于就是給原來的dataframe添加了一列。

到此這篇關(guān)于pandas groupby 用法詳解的文章就介紹到這了,更多相關(guān)pandas groupby 用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對PyQt5中樹結(jié)構(gòu)的實(shí)現(xiàn)方法詳解

    對PyQt5中樹結(jié)構(gòu)的實(shí)現(xiàn)方法詳解

    今天小編就為大家分享一篇對PyQt5中樹結(jié)構(gòu)的實(shí)現(xiàn)方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python中sample函數(shù)的介紹與使用

    python中sample函數(shù)的介紹與使用

    sample()函數(shù)常用來隨機(jī)獲取dataFrame中數(shù)據(jù),可以用于快速查看,下面這篇文章主要給大家介紹了關(guān)于python中sample函數(shù)的介紹與使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • python3連接MySQL數(shù)據(jù)庫實(shí)例詳解

    python3連接MySQL數(shù)據(jù)庫實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了python3連接MySQL數(shù)據(jù)庫實(shí)例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 淺談python import引入不同路徑下的模塊

    淺談python import引入不同路徑下的模塊

    下面小編就為大家?guī)硪黄獪\談python import引入不同路徑下的模塊。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Python讀取圖片EXIF信息類庫介紹和使用實(shí)例

    Python讀取圖片EXIF信息類庫介紹和使用實(shí)例

    這篇文章主要介紹了Python讀取圖片EXIF信息類庫介紹和使用實(shí)例,例如Python Imaging Library、EXIF.py等,需要的朋友可以參考下
    2014-07-07
  • Python內(nèi)置函數(shù)的用法實(shí)例教程

    Python內(nèi)置函數(shù)的用法實(shí)例教程

    這篇文章主要介紹了Python內(nèi)置函數(shù)的用法,包括求絕對值的abs()函數(shù)及數(shù)值類型轉(zhuǎn)換函數(shù)等,需要的朋友可以參考下
    2014-09-09
  • Python基于opencv的圖像壓縮算法實(shí)例分析

    Python基于opencv的圖像壓縮算法實(shí)例分析

    這篇文章主要介紹了Python基于opencv的圖像壓縮算法,結(jié)合實(shí)例形式分析了使用opencv進(jìn)行圖像壓縮的常用操作技巧與注意事項,需要的朋友可以參考下
    2018-05-05
  • Python?Type?Hints?學(xué)習(xí)之從入門到實(shí)踐

    Python?Type?Hints?學(xué)習(xí)之從入門到實(shí)踐

    Type?Hints(類型注解)進(jìn)一步強(qiáng)化了Python是一門強(qiáng)類型語言的特性,它在?Python3.5?中第一次被引入。使用Type?Hints可以讓我們編寫出帶有類型的Python代碼,本文將詳細(xì)介紹一下Type?Hints,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • 基于Python實(shí)現(xiàn)英語單詞小游戲

    基于Python實(shí)現(xiàn)英語單詞小游戲

    這篇文章主要為大家詳細(xì)介紹了如何通過Python實(shí)現(xiàn)一個簡單的英語單詞小游戲,四級考滿分的學(xué)姐告訴你這樣學(xué)英語逢考必過,趕緊康康叭
    2022-11-11
  • Python進(jìn)度條的使用

    Python進(jìn)度條的使用

    在使用Python處理比較耗時操作的時候,為了便于觀察處理進(jìn)度,就需要通過進(jìn)度條將處理情況進(jìn)行可視化展示,本文主要介紹了Python進(jìn)度條的使用,分享給大家,感興趣的可以了解一下
    2021-05-05

最新評論