Python資料處理——Pandas模組使用(七)
本文主要介紹Pandas統計函式:groupby、pivot_table及crosstab
產生資料
import numpy as np
import pandas as pd
from pandas import DataFrame
df = DataFrame({'key1':['a','a','b','b','a'],
'key2':['one','two','one','two','one'],
'data1':[1,2,3,2,5],
'data2':np.random.randn(5 )})
print(df)
# data1 data2 key1 key2
# 0 1 0.493919 a one
# 1 2 -0.887280 a two
# 2 3 -0.267727 b one
# 3 2 0.048972 b two
# 4 5 0.309441 a one
分組groupby
Pandas中最為常用和有效的分組函式。
- 按列分組
注意以下使用groupby()函式生成的group1是一箇中間分組變數,為GroupBy型別。既可依據單個列名’key1’進行為分組,也可依據多個列名[‘key1’,’key2’]進x行分組。根據for迴圈遍歷元素。
# 根據單個列分組
group1 = df.groupby('key1')
print(group1)
# <pandas.core.groupby.DataFrameGroupBy object at 0x0000015036489710>
# 根據多個列分組
group2 = df.groupby(['key1','key2'])
print(group2)
# <pandas.core.groupby.DataFrameGroupBy object at 0x000001503636C080>
# 遍歷group1中的元素
l=[x for x in group1]
print(l)
# [('a', data1 data2 key1 key2
# 0 1 0.493919 a one
# 1 2 -0.887280 a two
# 4 5 0.309441 a one),
# ('b', data1 data2 key1 key2
# 2 3 -0.267727 b one
# 3 2 0.048972 b two)]
- 按分組統計
在分組group1、group2上應用size()、sum()、count()等統計函式,能分別統計分組數量、不同列的分組和、不同列的分組數量。
# 呼叫聚合函式打印出每個組中結果
print(group1.size())
# key1
# a 3
# b 2
# dtype: int64
print(group1.sum() )
# data1 data2
# key1
# a 8 -0.083919
# b 5 -0.218755
print(group1.count())
# data1 data2 key2
# key1
# a 3 3 3
# b 2 2 2
- 應用agg()
對於分組的某一列或者多個列,應用agg(func)可以對分組後的資料應用func函式。例如:用group1[‘data1’].agg(‘mean’)對分組後的’data1’列求均值。當然也可以推廣到同時作用於多個列和使用多個函式上。
print(group1['data1'].agg('mean'))
# key1
# a 2.666667
# b 2.500000
# Name: data1, dtype: float64
print(group1['data1'].agg(['mean','sum']))
# mean sum
# key1
# a 2.666667 8
# b 2.500000 5
print(group1['data1','data2'].agg(['mean','sum']))
# data1 data2
# mean sum mean sum
# key1
# a 2.666667 8 -0.556335 -1.669005
# b 2.500000 5 0.052789 0.105577
- 應用apply()
apply()不同於agg()的地方在於:前者應用於dataframe的各個列,後者僅作用於指定的列。
print(df.groupby('key1').apply(np.mean))
# data1 data2
# key1
# a 2.666667 0.083070
# b 2.500000 -0.346864
print(df.groupby(['key1','key2']).apply(np.mean))
# data1 data2
# key1 key2
# a one 3.0 0.556917
# two 2.0 -0.864626
# b one 3.0 0.723882
# two 2.0 -1.417610
透視表pivot_table
可以產生類似於excel資料透視表的結果,相當的直觀。
- 分組統計
其中引數index指定“行”鍵,columns指定“列”鍵。
print(pd.pivot_table(df, index='key1', columns='key2'))
# data1 data2
# key2 one two one two
# key1
# a 3 2 0.246833 1.018249
# b 3 2 -0.508228 1.298586
print(df.pivot_table(['data1'], index='key1',columns='key2'))
# data1
# key2 one two
# key1
# a 3 2
# b 3 2
- 分項彙總
如果將引數margins設定為True,則可以得到分項總計資料。
print(df.pivot_table(index='key1',columns='key2', margins=True))
# data1 data2
# key2 one two All one two All
# key1
# a 3.0 2.0 2.666667 0.246833 1.018249 0.503971
# b 3.0 2.0 2.500000 -0.508228 1.298586 0.395179
# All 3.0 2.0 2.600000 -0.004854 1.158417 0.460454
交叉表crosstab
可以按照指定的行和列統計分組頻數,用起來非常方便;當然同樣的功能也可採用groupby實現。
print(pd.crosstab(df.key1,df.key2, margins=True))
# key2 one two All
# key1
# a 2 1 3
# b 1 1 2
# All 3 2 5
相關推薦
Python資料處理——Pandas模組使用(七)
本文主要介紹Pandas統計函式:groupby、pivot_table及crosstab 產生資料 import numpy as np import pandas as pd from pandas import DataFrame df = Da
Python資料處理——Pandas模組使用(六)
本文主要介紹pandas資料清洗,排序,索引設定,資料選取 資料清洗 更改資料格式astype() isin #計算一個“Series各值是否包含傳入的
Python資料分析學習筆記(1)numpy模組基礎入門
numpy模組可以進行高效的資料處理,並提供了陣列的支援,很多模組都依賴他,比如pandas、scipy、matplotlib等,因此這個模組是基礎。 (1)匯入: import numpy (2)建立一維和二維陣列: #建立一維陣列 x=numpy.
Python海量資料處理之_Hadoop(二)概念和原理
1. 說明 Hadoop是個分散式的架構,它將海量資料處理工作分配到叢集中的多個機器上執行。前篇介紹了Hadoop的安裝,在安裝過程中會產生一些疑問,比如NameNode是什麼東西?本篇就以問題&解答的方式介紹Hadoop的相關概念及其原理。 2. NameNode,DataNode,以及Seco
最全總結 | 聊聊 Python 資料處理全家桶(Mysql 篇)
![image](https://upload-images.jianshu.io/upload_images/1466987-82ad628a151414ab?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 1\. 前言 在爬蟲、自動化、資料
最全總結 | 聊聊 Python 資料處理全家桶(Memcached篇)
![image](https://upload-images.jianshu.io/upload_images/1466987-40e7d815377e744f?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 1\. 前言 本篇文章繼續繼續另外
最全總結 | 聊聊 Python 資料處理全家桶(配置篇)
![image](https://upload-images.jianshu.io/upload_images/1466987-12159a5ab2a559d8?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ## 1.前言 在實際專案中,經常會接觸
運維學python之爬蟲中級篇(七)Sqlite3
pro odin any /dev/ 裏的 連接 oracle postgresq pycharm 前文已經講過無數據庫版本操作(csv,json),今天我們要開始講有數據庫版本的操作,首先就是sqlite3。 1 介紹 SQLite是一個C庫,它提供了一個輕量級的基於磁盤
Python 二級模擬操作題(七)
right ali ima 輸出 import 單詞 com true 二級 1. 從鍵盤輸入 3 個數作為三角形的邊長,在屏幕上顯示輸出由這 3 個邊長構成三角形的面積(保留 2 位小數) 代碼: a,b,c = eval(input()) p = (a+b+c
python中的時間模組(time)
可以從原始碼中看到time有如下的方法: Functions: time() -- return current time in seconds since the Epoch as a float clock() -- return CPU time since process start
python資料結構與演算法(1)
資料結構與演算法(Python) Why?我們舉⼀個可能不太恰當的例⼦:如果將開發程式的過程⽐喻為作戰,我們碼農便是指揮作戰的將軍,⽽我們 所寫的程式碼便是⼠兵和武器。那麼資料結構和演算法是什麼?答⽈:兵法!我們可以不看兵法在戰場上⾁搏,如此,可能會勝利,可能會失敗。即使勝 利,可能也會付出巨⼤的代價。我們寫
python資料結構與演算法(6)
Python中的順序表Python中的list和tuple兩種型別採⽤了順序表的實現技術,具有前⾯討論的順 序表的所有性質。tuple是不可變型別,即不變的順序表,因此不⽀持改變其內部狀態的任何操 作,⽽其他⽅⾯,則與list的性質類似。list的基本實現技術Python標準型別list就是⼀種元素個數可變的
python資料結構與演算法(10)
棧棧(stack),有些地⽅稱為堆疊,是⼀種容器,可存⼊資料元素、訪問元 素、刪除元素,它的特點在於只能允許在容器的⼀端(稱為棧頂端指標,英 語:top)進⾏加⼊資料(英語:push)和輸出資料(英語:pop)的運算。 沒有了位置概念,保證任何時候可以訪問、刪除的元素都是此前最後存⼊的 那個元素,確定了⼀種預
python資料結構與演算法(9)
指定位置插⼊節點 def insert(self, pos, item): """在指定位置新增節點""" if pos <= 0:
python資料結構與演算法(8)
連結串列與順序表的對⽐連結串列失去了順序表隨機讀取的優點,同時連結串列由於增加了結點的指標域,空 間開銷⽐較⼤,但對儲存空間的使⽤要相對靈活。連結串列與順序表的各種操作複雜度如下所示:注意雖然表⾯看起來複雜度都是 O(n),但是連結串列和順序表在插⼊和刪除時進 ⾏的是完全不同的操作。連結串列的主要耗時操作是遍
python資料結構與演算法(7)
單鏈表的操作is_empty() 連結串列是否為空 length() 連結串列⻓度 travel() 遍歷整個連結串列add(item) 連結串列頭部新增元素 append(item) 連結串列尾部新增元素 insert(pos, item) 指定位置新增元素 remove(item) 刪除節點 search
python資料結構與演算法(11)
佇列佇列(queue)是隻允許在⼀端進⾏插⼊操作,⽽在另⼀端進⾏刪除操作的 線性表。佇列是⼀種先進先出的(First In First Out)的線性表,簡稱FIFO。允許插⼊ 的⼀端為隊尾,允許刪除的⼀端為隊頭。佇列不允許在中間部位進⾏操作! 假設佇列是q=(a1,a2,……,an),那麼a1就是隊頭元素,
python資料結構與演算法(12)
排序與搜尋排序演算法(英語:Sorting algorithm)是⼀種能將⼀串資料依照特定順序進⾏ 排列的⼀種演算法。排序演算法的穩定性穩定性:穩定排序演算法會讓原本有相等鍵值的紀錄維持相對次序。也就是如 果⼀個排序演算法是穩定的,當有兩個相等鍵值的紀錄R和S,且在原本的列表 中R出現在S之前,在排序過的列表
python資料結構與演算法(13)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如
python資料結構與演算法(15)
選擇排序選擇排序(Selection sort)是⼀種簡單直觀的排序演算法。它的⼯作原理如 下。⾸先在未排序序列中找到最⼩(⼤)元素,存放到排序序列的起始位 置,然後,再從剩餘未排序元素中繼續尋找最⼩(⼤)元素,然後放到已排 序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如