pandas | DataFrame中的排序與匯總方法

2020-08-23 承志的算法課堂

今天是pandas數據處理專題的第六篇文章,我們來聊聊DataFrame的排序與匯總運算。


在上一篇文章當中我們主要介紹了DataFrame當中的apply方法,如何在一個DataFrame對每一行或者是每一列進行廣播運算,使得我們可以在很短的時間內處理整份數據。今天我們來聊聊如何對一個DataFrame根據我們的需要進行排序以及一些匯總運算的使用方法。


排序


排序是我們一個非常基本的需求,在pandas當中將這個需求進一步細分,細分成了根據索引排序以及根據值排序。我們先來看看Series當中的排序方法。


Series當中的排序方法有兩個,一個是sort_index,顧名思義根據Series中的索引對這些值進行排序。另一個是sort_values,根據Series中的值來排序。這兩個方法都會返回一個新的Series:


索引排序


對於DataFrame來說也是一樣,同樣有根據值排序以及根據索引排序這兩個功能。但是由於DataFrame是一個二維的數據,所以在使用上會有些不同。最簡單的差別是在於Series只有一列,我們明確的知道排序的對象,但是DataFrame不是,它當中的索引就分為兩種,分別是行索引以及列索引。所以我們在排序的時候需要指定我們想要排序的軸,也就是axis。


默認的情況我們是根據行索引進行排序,如果我們要指定根據列索引進行排序,需要傳入參數axis=1。


我們還可以傳入ascending這個參數,用來指定我們想要的排序順序是正序還是倒序

值排序


DataFrame的值排序有所不同,我們不能對行進行排序,只能針對列。我們通過by參數傳入我們希望排序參照的列,可以是一列也可以是多列。

排名


有的時候我們希望得到元素的排名,我們會希望知道當前元素在整體當中排第幾,pandas當中也提供了這個功能,它就是rank方法。


我們可以發現我們隨手輸入的一串數字當中,包含兩個7,7是Series當中最大的數字,但是它們的排名為什麼是6.5呢?


其實很簡單,因為7出現了兩次,分別是第6位和第7位,這裡對它所有出現的排名取了平均,所以是6.5。如果我們不希望它取平均,而是根據出現的先後順序給出排名的話,我們可以用method參數指定我們希望的效果。


method的合法參數並不止first這一種,還有一些其他稍微冷門一些的用法,我們一併列出。



如果是DataFrame的話,默認是以行為單位,計算每一行中元素佔整體的排名。我們也可以通過axis參數指定以列為單位計算:

匯總運算


最後我們來介紹一下DataFrame當中的匯總運算,匯總運算也就是聚合運算,比如我們最常見的sum方法,對一批數據進行聚合求和。DataFrame當中同樣有類似的方法,我們一個一個來看。


首先是sum,我們可以使用sum來對DataFrame進行求和,如果不傳任何參數,默認是對每一行進行求和。


除了sum之外,另一個常用的就是mean,可以針對一行或者是一列求平均。


由於DataFrame當中常常會有為NA的元素,所以我們可以通過skipna這個參數排除掉缺失值之後再計算平均值。


另一個我個人覺得很好用的方法是descirbe,可以返回DataFrame當中的整體信息。比如每一列的均值、樣本數量、標準差、最小值、最大值等等。是一個常用的統計方法,可以用來了解DataFrame當中數據的分布情況。


除了介紹的這些方法之外,DataFrame當中還有很多類似的匯總運算方法,比如idxmax,idxmin,var,std等等,大家感興趣可以去查閱相關文檔,但是根據我的經驗一般用不到。


今天的文章到這裡就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支持吧(關注、轉發、點讚)。

- END -


本文始發於公眾號:TechFlow

相關焦點

  • 乾貨整理:處理Pandas Data Frame中的行和列
    DataFrame中的列,可以使用drop()方法。# importing pandas moduleimport pandas as pd  # making data frame from csv filedata = pd.read_csv("nba.csv", index_col ="Name" )  # dropping passed columnsdata.drop
  • D06 Pandas 花式創建DataFrame及屬性探索
    默認是通過np.arange(n)構造的自增索引columns 列索引,也就是欄位名,若沒有指定,則默認為自增索引(0,1,2…n)dtype 指定數據類型,只允許指定一個,如果沒有指定,則自動判斷copy 複製data數據,默認為False構造一個DataFrameimport pandas as pdimport numpy as np# 利用列表生成DataFramedata_frame
  • 基礎乾貨:Pandas-Data Frame基礎知識點總結
    在按行和列排列的dataframe數據集中,我們可以將任意數量的數據集存儲在一個dataframe中。我們可以對這些數據集執行許多操作,如算術操作、列/行選擇、列/行加法等。# import pandas as pdimport pandas as pd  # Calling DataFrame constructordf = pd.DataFrame()  print(df)產出:Empty DataFrameColumns
  • pandas | 詳解DataFrame中的apply與applymap方法
    在上一篇文章當中,我們介紹了panads的一些計算方法,比如兩個dataframe的四則運算,以及dataframe填充Null的方法。今天這篇文章我們來聊聊dataframe中的廣播機制,以及apply函數的使用方法。
  • 如何對Pandas DataFrame進行自定義排序
    Pandas DataFrame有一個內置方法sort_values(),可以根據給定的變量對值進行排序該方法本身使用起來相當簡單,但是它不適用於自定義排序,例如,t恤尺寸:XS、S、M、L和XL月份:一月、二月、三月、四月等星期幾:周一、周二、周三、周四、周五、周六和周日。在本文中,我們將了解如何對Pandas DataFrame進行自定義排序。
  • 使用Pandas DataFrame輸出報告
    在Jupyter Notebook上輸出pandas DataFrame是非常頻繁的。然而,你有沒有想過,我們可以讓DataFrame本身可視化?換句話說,對於一些簡單的可視化目的,我們不需要Matplotlib或其他可視化庫。Pandas DataFrame輸出可以像Excel電子表格一樣可視化,並且支持複雜樣式,代碼非常簡單。
  • Pandas數據結構:DataFrame
    初識DataFrameimport numpy as npimport pandas as pddata = {"name": ["Jack", "Tom", "LiSa"],"age": [20, 21, 18],"city": ["BeiJing", "TianJin", "ShenZhen"]}print
  • Python乾貨:panda特殊索引器——過濾數據
    用dataframe中包含的長度相同的真假列表來應用布爾掩碼,代碼1:# importing pandas as pdimport pandas as pd   # dictionary of listsdict = {'name':["aparna"
  • Pandas 常用功能詳細教程
    pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。
  • Python:將XML數據存儲到Pandas DataFrame中
    XML在各種程序中用於構造、存儲和傳輸數據。在這篇文章中,我們將討論如何使用python xml庫中的 「ElementTree」模塊來解析xml數據並將數據存儲在panda DataFrame中。首先,讓導入Python庫:import pandas as pdfrom xml.etree.ElementTree import parse現在,讓我們看一下'books.xml'文件中的標籤:我們可以通過將文件名傳遞給'parse()'方法來定義'XML'文檔對象:document = parse('books.xml')
  • 別找了,這是 Pandas 最詳細教程了
    pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。如果你早已熟知 python 的使用,可以直接跳到第三段。
  • 別找了,這是 pandas 最詳細教程了
    pandas 最有趣的地方在於裡面隱藏了很多包。它是一個核心包,裡面有很多其他包的功能。這點很棒,因為你只需要使用 pandas 就可以完成工作。pandas 相當於 python 中 excel:它使用表(也就是 dataframe),能在數據上做各種變換,但還有其他很多功能。如果你早已熟知 python 的使用,可以直接跳到第三段。
  • python語言-資料庫查詢數組轉Dataframe格式
    場景描述python環境下需要從greenplum/postgresql中,獲取算法執行的數據,但是從資料庫中查詢出來是數組格式的,算法無法使用,需要轉換為dataframe格式。pandas使用2.1 資料庫調用類 import dbgp as dbgp data
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • 直接保存 DataFrame 表格到本地,這個「騷操作」你還不知道?
    方法介紹 完成這個需求使用的是dataframe_image庫,因此在使用他之前,需要我們先安裝這個庫。 pip install dataframe_imageip install dataframe_image 然後在使用之前,還需要導入這個庫。
  • 將Python中的字典數據轉化為DataFrame
    編譯:老齊與本文相關的圖書推薦:《數據準備和特徵工程》在數據科學項目中,通常用Pandas的read_csv或者read_excel從相應文件中讀入數據,此外,對於數據量不大的時候,可能還有下面的情形出現:import pandas as pddata = {『key1』: values, 『key2』:values, 『key3』
  • 什麼是Pandas的DataFrame?
    DateFrame特點DataFrame中面向行和面向列的操作基本是平衡的。DataFrame中的數據是以一個或多個兩維塊存放的(而不是列表、字典或別的一維數據結構)。3.=DataFrame(data)#結果DataFrame會自動加上索引(跟Series一樣),且全部列會被有序排列:In [35]: frameOut[35]:pop state year0 1.5 Ohio 20001 1.7 Ohio 20012 3.6 Ohio 20023 2.4
  • 數據集的「乾坤大挪移」:如何使pandas.Dataframe從行式到列式?
    有很多種方法可以做到這一點,但pandas的melt()方法是其中最靈活的一種,你只需要學好這種就足夠了。本文將傳授給你數據集的「乾坤大挪移」大法,使用pd.melt()或melt方法使pandas. dataframe發生形變。一起來看看吧!行式vs寬式數據集如果我們將一個行式數據集與列式數據集進行比較,最容易理解行式數據集是什麼樣?
  • PandaSQL:一個讓你能夠通過SQL語句進行pandas的操作的python包
    或者您只是想在dataframe上運行一個特殊的SQL查詢。或者,也許你來自R,想要一個sqldf的替代品。這篇文章將介紹一種在pandas的dataframe中使用SQL的python包,並且使用一個不等連結的查詢操作來介紹PandasSQL的使用方法。不等連接(Non-equi join)假設你必須連接兩個dataframe。