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

淺談pandas用groupby后對層級索引levels的處理方法

 更新時間:2018年11月06日 11:05:00   作者:不論如何未來很美好  
今天小編就為大家分享一篇淺談pandas用groupby后對層級索引levels的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

層及索引levels,剛開始學習pandas的時候沒有太多的操作關(guān)于groupby,僅僅是簡單的count、sum、size等等,沒有更深入的利用groupby后的數(shù)據(jù)進行處理。近來數(shù)據(jù)處理的時候有遇到這類問題花了一點時間,所以這里記錄以及復(fù)習一下:(以下皆是個人實踐后的理解)

我使用一個實例來講解下面的問題:一張數(shù)據(jù)表中有三列(動物物種、物種品種、品種價格),選出每個物種從大到小品種的前兩種,最后只需要品種和價格這兩列。

pandas groupby后對層級索引levels

以上這張表是我們后面需要處理的數(shù)據(jù)表 (物種 品種 價格)

levels:層及索引 (創(chuàng)建pandas類型時可以預(yù)先定義;使用groupby后也會生成)

我們看看levels什么樣(根據(jù)df1物種分類,再根據(jù)df2品種排序后 如下圖)

pandas groupby后對層級索引levels

圖中可以看出,根據(jù)groupby分類后的cat、dog便是level,以及后面的一列原始位置索引也是level

好了現(xiàn)在簡單了解levels,我們該如何對它進行處理,如何完成上面的實例呢?(可能你拿到這樣的層級數(shù)據(jù),不會操作,不知道如何提取其中的信息)

代碼及講解如下:

首先導(dǎo)入pandas、numpy庫,以及創(chuàng)建原始數(shù)據(jù):

import pandas as pd
import numpy as np
df = pd.DataFrame({'df1':['cat','cat','dog','cat','dog','dog'],'df2':[2,3,4,1,3,1],'df3':[100,200,100,300,200,200]})

原始數(shù)據(jù)最上面那張圖

下面我們根據(jù)物種來分類,并且使用apply調(diào)用sort_df2函數(shù)對品種進行排序:

def sort_df2(data):
 data = data.sort_values(by='df2',ascending=False) #df2:品種列 ascending:排序方式
 return data
group = df.groupby(df['df1']).apply(sort_df2) #groupby以及apply的結(jié)合使用

處理后數(shù)據(jù),上面第二張圖

print(group.index) #看看groupby后的行索引什么樣

pandas groupby后對層級索引levels

groupby后如上圖,有層級標簽(這里兩列),labels標簽(分類,位置)

這里我們需要的是第一層級標簽的第一列(也就是cat、dog)

levels = group.index.levels[0] #取出第一級標簽:

下面將是兩層循環(huán),完成從中選出(物種前兩個品種以及它的價格),很簡單的操作:

values = []
for i in levels:
 mid_group = group.loc[i] #選出i標簽物種的所有品種
 mid_group = mid_group.iloc[:2,:] #我們只取排序后的品種的前兩種(要注意這里使用iloc,它與loc的區(qū)別)
 cnt = len(mid_group) #為了防止循環(huán)長度錯誤,所以我們還是需要計算長度,因為如果真正數(shù)據(jù)不足2條還是不報錯
 for j in range(cnt): #現(xiàn)在在每個物種cat、dog中操作
 value = mid_group.iloc[j,:] #我們選出該物種的第j條所有信息df1、df2、df3
 value_pro = (value['df2'],value['df3']) #然后只取df2、df3,將它們放到元組中
 values.append(value_pro)

所有的操作完成了,我們看看結(jié)果:

print(values) #此時在列表中保存了上面提取的元組信息,我們可以使用pandas再次轉(zhuǎn)換它們?yōu)镈ataFrame,也可以做其它操作

pandas groupby后對層級索引levels

我覺得這個例子比較形象,但是還是有邏輯欠缺的地方,不過不重要,看懂了上面的例子,基本上就能了解和處理層級數(shù)據(jù)了。當然這里的數(shù)據(jù)簡單,只是為了更好的理解,真正的處理數(shù)據(jù)時,可能會出現(xiàn)更為復(fù)雜的層級結(jié)構(gòu),這時需要能夠更靈活的處理,如果你有更好的理解和建議,可以回復(fù)。

-------更新(增加對兩層索引的操作)--------

在原來的基礎(chǔ)上增加一列df4表示動物的大小特征

df = pd.DataFrame({'df1':['cat','cat','dog','cat','dog','dog'],'df2':[2,3,4,1,3,1],'df3':[100,200,100,300,200,200],'df4':['大','中','小','巨大','小','中']})

pandas groupby后對層級索引levels

此時根據(jù)df1、df4兩列來分類,再對兩層的層級索引操作:

df_group = df.groupby(['df1','df4']).size()

pandas groupby后對層級索引levels

分類后得到的是對應(yīng)兩個特征的動物數(shù)量,現(xiàn)在來取得其中的值:

print(df_group.index)
h = df_group.loc[['cat','df4']]
print(h)

先查看數(shù)據(jù)的index信息,從中我們可以看到兩層索引對應(yīng)的levels有兩中,然后我們根據(jù)loc測試選出cat類的df4這一列(也可以填大、中、巨大選出一列)

pandas groupby后對層級索引levels

這樣就得到了cat種類的信息,當然也可以選出dog種類,那么如何得出(cat,巨大,1)這樣的一一對應(yīng)的數(shù)據(jù)呢?

df1_name = df_group.index.levels[0]     #獲得第一層的分類cat、dog
for i in range(len(df1_name)):  #循環(huán)遍歷第一層
 df_level = df_group.loc[[df1_name[i],'df4']] #這里是選出第一層的所有信息
 df_level_ch = pd.DataFrame(df_level)   #由于上面得到是Series我們需要將它轉(zhuǎn)換為DataFrame才能更好的操作
 for j in range(len(df_level_ch)):   #開始對第二層進行遍歷
  a = df_level_ch.ix[j].name    #由于是DataFrame所以可以取每一行的name值('cat','大')
  b = df_level_ch.values[j][0]   #獲取對應(yīng)數(shù)量,由于是嵌套列表,所以我們逐層獲取
  print(a,b)

pandas groupby后對層級索引levels

基本上是篩選出來了,還是很簡單的。這只是其中的一個例子,如果遇到需要其他的操作,可以根據(jù)這個例子來隨機變換。

這個方法雖然可以篩選,但是個人覺得數(shù)據(jù)量過大,就不是很好,暫時沒有更好的方法,如果那位朋友有其他操作,可以分享一下。

以上這篇淺談pandas用groupby后對層級索引levels的處理方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python使用range函數(shù)計算一組數(shù)和的方法

    python使用range函數(shù)計算一組數(shù)和的方法

    這篇文章主要介紹了python使用range函數(shù)計算一組數(shù)和的方法,涉及Python中range函數(shù)的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-05-05
  • python列表每個元素同增同減和列表元素去空格的實例

    python列表每個元素同增同減和列表元素去空格的實例

    今天小編就為大家分享一篇python列表每個元素同增同減和列表元素去空格的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python開發(fā)的HTTP庫requests詳解

    Python開發(fā)的HTTP庫requests詳解

    Requests是用Python語言編寫,基于urllib,采用Apache2 Licensed開源協(xié)議的HTTP庫。它比urllib更加方便,可以節(jié)約我們大量的工作,完全滿足HTTP測試需求。Requests的哲學是以PEP 20 的習語為中心開發(fā)的,所以它比urllib更加Pythoner。更重要的一點是它支持Python3哦!
    2017-08-08
  • Python字符串拼接的幾種方法整理

    Python字符串拼接的幾種方法整理

    這篇文章主要介紹了Python字符串拼接的幾種方法整理的相關(guān)資料,這里提供了五種方法及實現(xiàn),需要的朋友可以參考下
    2017-08-08
  • Python操作JSON文件的知識點整理

    Python操作JSON文件的知識點整理

    Python?提供了內(nèi)置的?json?模塊來處理?JSON?格式的文件。該模塊主要分為讀取和寫入?JSON?文件。本文主要為大家整理了一些Python操作JSON文件的知識點,需要的可以參考一下
    2023-01-01
  • python pyautogui手動活動(模擬鼠標鍵盤)自動化庫使用

    python pyautogui手動活動(模擬鼠標鍵盤)自動化庫使用

    這篇文章主要為大家介紹了python pyautogui手動活動(模擬鼠標鍵盤)自動化庫使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • python中字典的常見操作總結(jié)1

    python中字典的常見操作總結(jié)1

    這篇文章主要介紹了python中字典的常見操作總結(jié),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Python數(shù)據(jù)結(jié)構(gòu)與算法之跳表詳解

    Python數(shù)據(jù)結(jié)構(gòu)與算法之跳表詳解

    跳表是帶有附加指針的鏈表,使用這些附加指針可以跳過一些中間結(jié)點,用以快速完成查找、插入和刪除等操作。本節(jié)將詳細介紹跳表的相關(guān)概念及其具體實現(xiàn),需要的可以參考一下
    2022-02-02
  • PyCharm代碼提示忽略大小寫設(shè)置方法

    PyCharm代碼提示忽略大小寫設(shè)置方法

    今天小編就為大家分享一篇PyCharm代碼提示忽略大小寫設(shè)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    這篇文章主要介紹了pytorch 運行一段時間后出現(xiàn)GPU OOM的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論