1. 程式人生 > >利用Python進行資料分析--資料聚合與分組運算1

利用Python進行資料分析--資料聚合與分組運算1

轉載自:http://blog.csdn.net/ssw_1990/article/details/22286583

pandas提供了一個靈活高效的groupby功能,它使你能以一種自然的方式對資料集進行切片、切塊、摘要等操作。

  • 根據一個或多個鍵(可以是函式、陣列或DataFrame列名)拆分pandas物件。
  • 計算分組摘要統計,如計數、平均值、標準差,或使用者自定義函式。
  • 對DataFrame的列應用各種各樣的函式。
  • 應用組內轉換或其他運算,如規格化、線性迴歸、排名或選取子集等。
  • 計算透視表或交叉表。
  • 執行分位數分析以及其他分組分析。

1、分組鍵可以有多種形式,且型別不必相同

  • 列表或陣列,其長度與待分組的軸一樣。
  • 表示DataFrame某個列名的值。
  • 字典或Series,給出待分組軸上的值與分組名之間的對應關係。
  • 函式,用於處理軸索引或索引中的各個標籤。

注意:

後三種都只是快捷方式而已,其最終目的仍然是產生一組用於拆分物件的值。

2、首先來看看下面這個非常簡單的表格型資料集(以DataFrame的形式):

  1. >>> import pandas as pd  
  2. >>> df = pd.DataFrame({'key1':['a''a''b''b''a'],  
  3. ...     'key2':['one''two''one''two'
    'one'],  
  4. ...     'data1':np.random.randn(5),  
  5. ...     'data2':np.random.randn(5)})  
  6. >>> df  
  7.       data1     data2 key1 key2  
  8. 0 -0.4106730.519378    a  one  
  9. 1 -2.1207930.199074    a  two  
  10. 20.642216 -0.143671    b  one  
  11. 30.975133 -0.592994    b  two  
  12. 4 -1.017495 -0.530459    a  one  
假設你想要按key1進行分組,並計算data1列的平均值,我們可以訪問data1,並根據key1呼叫groupby:
  1. >>> grouped = df['data1'].groupby(df['key1'])  
  2. >>> grouped  
  3. <pandas.core.groupby.SeriesGroupBy object at 0x04120D70>  
變數grouped是一個GroupBy物件,它實際上還沒有進行任何計算,只是含有一些有關分組鍵df['key1']的中間資料而已,然後我們可以呼叫GroupBy的mean方法來計算分組平均值:
  1. >>> grouped.mean()  
  2. key1  
  3. a      -1.182987
  4. b       0.808674
  5. dtype: float64  
說明:

資料(Series)根據分組鍵進行了聚合,產生了一個新的Series,其索引為key1列中的唯一值。之所以結果中索引的名稱為key1,是因為原始DataFrame的列df['key1']就叫這個名字。

3、如果我們一次傳入多個數組,就會得到不同的結果:

  1. >>> means = df['data1'].groupby([df['key1'], df['key2']]).mean()  
  2. >>> means  
  3. key1  key2  
  4. a     one    -0.714084
  5.       two    -2.120793
  6. b     one     0.642216
  7.       two     0.975133
  8. dtype: float64  

通過兩個鍵對資料進行了分組,得到的Series具有一個層次化索引(由唯一的鍵對組成):

  1. >>> means.unstack()  
  2. key2       one       two  
  3. key1                      
  4. a    -0.714084 -2.120793
  5. b     0.6422160.975133
在上面這些示例中,分組鍵均為Series。實際上,分組鍵可以是任何長度適當的陣列:
  1. >>> states = np.array(['Ohio''California''California''Ohio''Ohio'])  
  2. >>> years = np.array([20052005200620052006])  
  3. >>> df['data1'].groupby([states, years]).mean()  
  4. California  2005   -2.120793
  5.             20060.642216
  6. Ohio        20050.282230
  7.             2006   -1.017495
  8. dtype: float64  

4、此外,你還可以將列名(可以是字串、數字或其他Python物件)用作分組將:

  1. >>> df.groupby('key1').mean()  
  2.          data1     data2  
  3. key1                      
  4. a    -1.1829870.062665
  5. b     0.808674 -0.368333
  6. >>> df.groupby(['key1''key2']).mean()  
  7.               data1     data2  
  8. key1 key2                      
  9. a    one  -0.714084 -0.005540
  10.      two  -2.1207930.199074
  11. b    one   0.642216 -0.143671
  12.      two   0.975133 -0.592994
說明:

在執行df.groupby('key1').mean()時,結果中沒有key2列。這是因為df['key2']不是數值資料,所以被從結果中排除了。預設情況下,所有數值列都會被聚合,雖然有時可能會被過濾為一個子集。

無論你準備拿groupby做什麼,都有可能會用到GroupBy的size方法,它可以返回一個含有分組大小的Series:

  1. >>> df.groupby(['key1''key2']).size()  
  2. key1  key2  
  3. a     one     2
  4.       two     1
  5. b     one     1
  6.       two     1
  7. dtype: int64  
注意:

分組鍵中的任何缺失值都會被排除在結果之外。

5、對分組進行迭代

GroupBy物件支援迭代,可以產生一組二元元組(由分組名和資料塊組成)。看看下面這個簡單的資料集:

  1. >>> for name, group in df.groupby('key1'):  
  2. ...     print(name)  
  3. ...     print(group)  
  4. ...   
  5. a  
  6.       data1     data2 key1 key2  
  7. 0 -0.4106730.519378    a  one  
  8. 1 -2.1207930.199074    a  two  
  9. 4 -1.017495 -0.530459    a  one  
  10. b  
  11.       data1     data2 key1 key2  
  12. 20.642216 -0.143671    b  one  
  13. 30.975133 -0.592994    b  two  
對於多重鍵的情況,元組的第一個元素將會是由鍵值組成的元組:
  1. >>> for (k1, k2), group in df.groupby(['key1''key2']):  
  2. ...     print k1, k2  
  3. ...     print group  
  4. ...   
  5. a one  
  6.       data1     data2 key1 key2  
  7. 0 -0.4106730.519378    a  one  
  8. 4 -1.017495 -0.530459    a  one  
  9. a two  
  10.       data1     data2 key1 key2  
  11. 1 -2.1207930.199074    a  two  
  12. b one  
  13. 相關推薦

    利用Python進行資料分析--資料聚合分組運算1

    轉載自:http://blog.csdn.net/ssw_1990/article/details/22286583 pandas提供了一個靈活高效的groupby功能,它使你能以一種自然的方式對資料集進行切片、切塊、摘要等操作。 根據一個或多個鍵(可以是函式、陣列或DataFrame列名)拆分pa

    資料基礎---《利用Python進行資料分析·第2版》第10章 資料聚合分組運算

    之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 對資料集進行分組並對各組應用一個函式(無論是聚合還是轉換),通常是資料分析工作中的重要環節。在將資料集載入、融合、準備好之

    利用python進行資料分析-資料聚合分組運算2

    cand_nm        contbr_occupation                      Obama, Barack  PROFESSOR                                 2165071.08                CEO               

    利用Python進行資料分析》筆記---第9章資料聚合分組運算

    寫在前面的話: 還有一定要說明的: 我使用的是Python2.7,書中的程式碼有一些有錯誤,我使用自己的2.7版本調通。 # coding: utf-8 from pandas import Series, DataFrame import p

    python資料分析08——pandas資料聚合分組運算

    python資料分析08——pandas資料聚合與分組運算 在將資料集載入、融合、準備好之後,通常就是計算分組統計或生成透視表, pandas提供了 一個靈活高效的groupby功能,它使你能以一種自然的方式對資料集進行切片、切塊、摘要等操作。 一、GroupBy機制 分組運算"

    python/pandas資料分析(十五)-聚合分組運算例項

    用特定於分組的值填充缺失值 用平均值去填充nan s=pd.Series(np.random.randn(6)) s[::2]=np.nan s 0 NaN 1 -0.1181

    利用Python進行NBA比賽資料分析

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    pandas 資料聚合分組運算

    1. GroupBy技術 pandas物件(無論是Series、DataFrame還是其他的)中的資料會根據你所提供的一個或多個鍵被拆分(split)為多組。 拆分操作是在物件的特定軸上執行的。 例如:DataFrame可以在其行(axis=0)或列(axis=1)上進行分組,然後將一個函式應用

    資料聚合分組運算

    #資料聚合與分組 import pandas as pd import numpy as np df = pd.DataFrame({'key1' : ['a', 'a', 'b', 'b', 'a'], 'key2' : ['one',

    07資料聚合分組運算

    1.Groupy技術 核心思想:拆分-應用-合併 step1. pandas物件會根據你所提供的一個或多個鍵被拆分為多組; step2. 將一個函式應用到各個分組併產生一個新值; step3. 最後所有這些函式的執行結果會被合併到最終的結果物件中; data=pd.DataFrame

    第十篇 資料聚合分組運算

    對資料集進⾏分組並對各組應⽤⼀個函式(⽆論是聚合還是轉換),通常是資料分析⼯作中的重要環節。在將資料集載入、融合、準備好之後,通常就是計算分組統計或⽣成透視表。pandas提供了⼀個靈活⾼效的gruopby功能,它使你能以⼀種⾃然的⽅式對資料集進⾏切⽚、切塊、摘要等操作。 關係型資料庫和SQL(Stru

    pandas—資料聚合分組運算

    data1 (-2.848, -1.353] count 87.000000 max 2.230317 mean -0.073813

    資料基礎---《利用Python進行資料分析·第2版》第6章 資料載入、儲存檔案格式

    之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 訪問資料是使用本書所介紹的這些工具的第一步。我會著重介紹pandas的資料輸入與輸出,雖然別的庫中也有不少以此為目的的工具

    資料基礎---《利用Python進行資料分析·第2版》第8章 資料規整:聚合、合併和重塑

    之前自己對於numpy和pandas是要用的時候東學一點西一點,直到看到《利用Python進行資料分析·第2版》,覺得只看這一篇就夠了。非常感謝原博主的翻譯和分享。 在許多應用中,資料可能分散在許多檔案或資料庫中,儲存的形式也不利於分析。本章關注可以聚合、合併、重塑資料的方法。 首先

    推薦書籍必有連結】利用python進行資料分析推薦系統

    資料分析是指用適當的統計分析方法對收集來的大量資料進行分析,提取有用資訊和形成結論而對資料加以詳細研究和概括總結的過程。這一過程也是質量管理體系的支援過程。在實用中,資料分析可幫助人們作出判斷,以便採取適當行動 由於有很多小夥伴們,在後臺諮詢有沒有資料分析相關的推薦,這裡推薦一本在京東上

    利用Python進行資料分析》——Chapter9:資料聚合分組

    對資料集進行分組並對各組應用一個函式,這是資料分析的一個重要環節,將資料集準備好後,接下來的任務就是計算分組統計或深成透視表 GroupBy技術(分組) 建立一個GroupBy物件,再呼叫GroupBy的各種方法計算相關資料 df = pd.DataFrame(

    利用python進行資料分析】準備例項(一)

    我已經分享了本書的ipynb,所以跟著我一起來實驗吧。如果你不懂怎麼開啟ipynb格式的檔案,那也沒關係,anaconda3讓一切變得更簡單(我像是打廣告的)。安裝玩anaconda之後,我們在開始裡就可以找到它的資料夾,裡面有一個Jupyter Notebook,就是它了。

    資料集合分組運算利用python進行資料分析》筆記,第9章

    pandas的groupby功能,可以計算 分組統計和生成透視表,可對資料集進行靈活的切片、切塊、摘要等操作 GroupBy技術 “split-apply-comebine”(拆分-應用-合併) import numpy as np from pand

    利用Python進行資料分析 中的問題解決方案彙總

    </pre><span style="font-size:18px">1.<span style="color:rgb(85,85,85); font-family:'microsoft yahei'; line-height:35px"&g

    利用Python進行資料分析——資料合併整形

    import numpy as np import pandas as pd 多級索引 資料集存在多個級別的索引標號是可能的,特別是在低維下處理高維資料時。 Series obj=pd.Series(np.random.randn(9),