df.rank & pd.pivot_table & pd.read_excel & df添加行 &調整df行列順序(reindex再理解)

1. df.rank

df.rank針對指定的序列進行排序(從大到小或從小到大),並返回排名的序列(從第一名到最後一名)
rank有兩個重要參數:ascending、method。

  • ascending:爲True時,表示按從小到大排列,即最小的爲第一名,最大的爲倒數第一名;ascending爲False,則相反
  • method:主要控制當兩個數值相等時,如何排名。如考試得分,小明和小紅都考了100分,兩人都是第一名還是一個第一名,一個第二名。此時下一個得99分的是第三名,還是第二名呢?
    • average:如下例,張三和李四並列第四名(同時佔據第四、第五兩個坑),那麼兩人的排名是4和5的平均值,下一個人是第6名
    • max:如下例,張三和李四佔據第4、第5兩個坑,那麼兩人都是第5名(4/5較大排名那個),下一個人是第6名
    • min:如下例,張三和李四佔據第4、第5兩個坑,那麼兩人都是第4名(4/5較小排名那個),下一個人是第6名
    • dense:張三和李四並列第四名,但是下一個人是第5名
    • first:張三和李四,誰先出現誰是第4名,另一個是第5名,下一個人是第6名
a = pd.Series([1, 2, 3, 4, 4, 6], index=['小明', '小紅', '小張', '張三', '李四', '王五'])
a.rank(ascending=True, method='first')
小明    1.0
小紅    2.0
小張    3.0
張三    4.0
李四    5.0
王五    6.0
dtype: float64

2. pd.pivot_table

pivot_table對應excel中的數據透視表。本章中所用df數據如下:
在這裏插入圖片描述
df.pivot_table有如下參數:

  • values=None,
  • index=None,
  • columns=None,
  • aggfunc=‘mean’,
  • fill_value=None,
  • margins=False,
  • dropna=True,
  • margins_name=‘All’,
  • observed=False,
    有些參數不常用就不贅述了,本章主要講述幾個很重要的參數

2.1 index

index即索引,其實透視圖就是分組後聚合,index就是按照指定的列分組並作爲index,其餘列進行聚合操作(其餘列應該爲剩下的所有列,爲什麼沒有月份一列呢,aggfunc時會講)。代碼、結果如下:
在這裏插入圖片描述
index也可以選擇兩列,設置多層索引,如下所示
在這裏插入圖片描述

2.2 aggfunc

上例中按照省份分組後,其餘列聚合,那麼是如何聚合呢,比如北京的土地,是將北京所有的土地求和嗎?aggfunc就是負責如何聚合的,是北京所有土地求和,還是求平均值等等。默認是mean,即上例是北京所有土地求平均值。
在這裏插入圖片描述
aggfunc的函數不一定是max,min, sum這種內置函數,也可以是自定義含義或者匿名函數
在這裏插入圖片描述
涉及種類時也可以是
aggfunc=lambda x: x.unique()
上例index中留下一個問題,爲什麼其餘列不包括月份,是因爲講述index時,aggfunc默認爲mean,而月份是字符串,不能進行mean操作,故沒有月份一列。

2.3 values

index選擇需要分組的列作爲索引,那麼values就是選擇對哪些列進行聚合操作。如針對省份進行分組,針對收入進行聚合操作
在這裏插入圖片描述
index和values都可以選擇多個
在這裏插入圖片描述
講述index時,沒有設置values,默認是其餘可以進行aggfunc操作的所有列

2.4 columns

index是針對每一行的名稱進行分組,那麼columns就是針對每一列的名稱進行分組,選後選擇需要進行聚合操作的列作爲values進行aggfunc操作。
比如index=‘省份’, columns=‘月份’, values='收入’即index爲省份的分組,columns爲月份的分組,進行aggfunc操作的爲收入的列。如北京1月的收入,北京2月的收入,具體如下:
在這裏插入圖片描述
同樣的columns也可以設置多列,即列爲多層。

2.5 fill_value&dropna

fill_value爲將NaN填充的數值:
在這裏插入圖片描述
dropna=True即刪除全部爲NaN的列,本例中不涉及,故不再展示

3. pd.read_excel

除了常用的io、sheet_name、header、index_col。其他常用的如(數據依然是上一章的df):

  • skiprows:省略指定行的數據
    原始數據有四個河北省數據,現在省略第1-4行,故讀出來的數據沒有河北省的數據
    在這裏插入圖片描述
  • name:指定列的名稱
    在這裏插入圖片描述
    發現列名不再是省份、月份、收入、土地,而是names指定的。

4. df添加行

4.1 append方法

df添加列很容易,但是行的話需要用append方法
在這裏插入圖片描述
這裏的other即新添加的值。
新添加的值可以是list of list、字典、Series、DataFrame。如果是list of list,則默認的index爲從0開始。
如果原始的df和other的index不一樣,如df列名爲A、B、C,新添加Series的index爲A、B、D。那麼,最終結果就會多一列D。
在這裏插入圖片描述
ignore_index爲True即新加一行的index不會和原來df的index相同。如果爲False則可能會和原來df的index相同。
特殊的,當Series有name時,ignore_index=False,則新加一行的index爲name,爲True時,新加一行的index爲其他(根據df的index確定)
在這裏插入圖片描述
總而言之,ignore_index很重要,有時ignore_index=False會報錯,爲True時不會報錯
下圖爲添加dataframe和concat操作有點像
在這裏插入圖片描述

4.2 concat方法

原始數據df是DataFrame,如果添加的是Series,就會出現如下情況
在這裏插入圖片描述
只有將a也變成DataFrame纔行
在這裏插入圖片描述

4.3 loc

在這裏插入圖片描述
新添加的一行index也可以自定義:
在這裏插入圖片描述

5. 調整df行列順序

無論行排序還是列排序,方法都是共用的。

  • 方法1:sort_index
    如果只是簡單按照行名或者列名排序,則使用
    df.sort_index(axis=0)或df.sort_index(axis=1)
  • 方法2:reindex(極力推薦)
    reindex可以實現很多功能,先看下面的截圖
    在這裏插入圖片描述
    可以發現如果新的index和原來index相同,那麼就相當於實現了排序功能。無論新的index爲何,新得到的數據,只有len(新index)個;新index與原始數據相同的index數據會被複制過來;新index新出現的index,新結果會自動添加(填充何值由method決定);原始數據有某一個index,稱作a,但是新index沒有,則index a所指的數據就會被刪除。
    但help以下reindex,會發現reindex的功能不止上述:
    在這裏插入圖片描述
    可以發現reindex有很多參數,比較重要的有labels、index、columns、axis, method。上述例子只有一個參數,故是指定了labels。下面從排序的角度講述這5個參數(假設新的索引和原始數據索引相同,等價於排序)
    我們知道sort_index可以通過axis來實現對index排序還是對columns排序。其實reindex也一樣。
    label+axis=0就實現了對index按照自己想要的順序進行重排的功能。其等效於單獨使用index(index不能與axis並用)
    在這裏插入圖片描述
    label+axis=1就實現了對columns按照自己想要的順序重排的功能。其等效於單獨使用columns(columns不能與axis並用)
    在這裏插入圖片描述
    method的具體用法詳見博客:https://blog.csdn.net/weixin_43178406/article/details/87460939
  • 方法3:loc
    在這裏插入圖片描述
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章