最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談pandas用groupby后對(duì)層級(jí)索引levels的處理方法

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

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

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

pandas groupby后對(duì)層級(jí)索引levels

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

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

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

pandas groupby后對(duì)層級(jí)索引levels

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

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

代碼及講解如下:

首先導(dǎo)入pandas、numpy庫(kù),以及創(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ù)物種來(lái)分類(lèi),并且使用apply調(diào)用sort_df2函數(shù)對(duì)品種進(jìn)行排序:

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后對(duì)層級(jí)索引levels

groupby后如上圖,有層級(jí)標(biāo)簽(這里兩列),labels標(biāo)簽(分類(lèi),位置)

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

levels = group.index.levels[0] #取出第一級(jí)標(biāo)簽:

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

values = []
for i in levels:
 mid_group = group.loc[i] #選出i標(biāo)簽物種的所有品種
 mid_group = mid_group.iloc[:2,:] #我們只取排序后的品種的前兩種(要注意這里使用iloc,它與loc的區(qū)別)
 cnt = len(mid_group) #為了防止循環(huán)長(zhǎng)度錯(cuò)誤,所以我們還是需要計(jì)算長(zhǎng)度,因?yàn)槿绻嬲龜?shù)據(jù)不足2條還是不報(bào)錯(cuò)
 for j in range(cnt): #現(xiàn)在在每個(gè)物種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) #此時(shí)在列表中保存了上面提取的元組信息,我們可以使用pandas再次轉(zhuǎn)換它們?yōu)镈ataFrame,也可以做其它操作

pandas groupby后對(duì)層級(jí)索引levels

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

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

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

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后對(duì)層級(jí)索引levels

此時(shí)根據(jù)df1、df4兩列來(lái)分類(lèi),再對(duì)兩層的層級(jí)索引操作:

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

pandas groupby后對(duì)層級(jí)索引levels

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

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

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

pandas groupby后對(duì)層級(jí)索引levels

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

df1_name = df_group.index.levels[0]     #獲得第一層的分類(lèi)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)):   #開(kāi)始對(duì)第二層進(jìn)行遍歷
  a = df_level_ch.ix[j].name    #由于是DataFrame所以可以取每一行的name值('cat','大')
  b = df_level_ch.values[j][0]   #獲取對(duì)應(yīng)數(shù)量,由于是嵌套列表,所以我們逐層獲取
  print(a,b)

pandas groupby后對(duì)層級(jí)索引levels

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

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

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

相關(guān)文章

  • python 實(shí)現(xiàn)兔子生兔子示例

    python 實(shí)現(xiàn)兔子生兔子示例

    今天小編就為大家分享一篇python 實(shí)現(xiàn)兔子生兔子示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • python實(shí)現(xiàn)音樂(lè)播放和下載小程序功能

    python實(shí)現(xiàn)音樂(lè)播放和下載小程序功能

    這篇文章主要介紹了python實(shí)現(xiàn)音樂(lè)播放和下載小程序功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中PySide2的安裝及配置

    Python中PySide2的安裝及配置

    在python中,支持圖形化界面開(kāi)發(fā)的庫(kù)有很多,今天主要介紹一下PySide2這個(gè)庫(kù)。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Pycharm安裝scrapy及初始化爬蟲(chóng)項(xiàng)目的完整步驟

    Pycharm安裝scrapy及初始化爬蟲(chóng)項(xiàng)目的完整步驟

    因?yàn)槿腴T(mén)python以來(lái)一直使用pycharm,所以對(duì)著黑白的DOS不習(xí)慣,所以此次來(lái)實(shí)現(xiàn)使用pycharm進(jìn)行實(shí)現(xiàn)使用scrapy框架,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝scrapy及初始化爬蟲(chóng)項(xiàng)目的完整步驟,需要的朋友可以參考下
    2022-08-08
  • Python利用tenacity庫(kù)處理超時(shí)重試機(jī)制詳解

    Python利用tenacity庫(kù)處理超時(shí)重試機(jī)制詳解

    Python?的?tenacity?庫(kù)用于實(shí)現(xiàn)重試機(jī)制,特別適合處理網(wǎng)絡(luò)不穩(wěn)定或其他意外錯(cuò)誤導(dǎo)致的函數(shù)調(diào)用失敗,下面我們就來(lái)看看它的具體使用吧
    2025-02-02
  • 通過(guò)Python的gtts庫(kù)將文字轉(zhuǎn)為音頻的操作方法

    通過(guò)Python的gtts庫(kù)將文字轉(zhuǎn)為音頻的操作方法

    文字轉(zhuǎn)音頻可以幫助視覺(jué)障礙者通過(guò)聽(tīng)取聲音來(lái)獲取信息,也可以幫助人們方便地聽(tīng)取一些長(zhǎng)篇文章或?qū)W習(xí)資料,節(jié)省閱讀時(shí)間和疲勞,這篇文章主要介紹了通過(guò)Python的gtts庫(kù)將文字轉(zhuǎn)為音頻的方法,需要的朋友可以參考下
    2023-05-05
  • Python mplfinance庫(kù)繪制金融圖表實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例探究

    Python mplfinance庫(kù)繪制金融圖表實(shí)現(xiàn)數(shù)據(jù)可視化實(shí)例探究

    mplfinance(Matplotlib Finance),它是基于Matplotlib的庫(kù),專(zhuān)門(mén)用于創(chuàng)建金融圖表和交互式金融數(shù)據(jù)可視化,本文將深入介紹?mplfinance,包括其基本概念、功能特性以及如何使用示例代碼創(chuàng)建各種金融圖表
    2024-01-01
  • Django 項(xiàng)目通過(guò)加載不同env文件來(lái)區(qū)分不同環(huán)境

    Django 項(xiàng)目通過(guò)加載不同env文件來(lái)區(qū)分不同環(huán)境

    這篇文章主要介紹了Django 項(xiàng)目如何通過(guò)加載不同env文件來(lái)區(qū)分不同環(huán)境,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Python+PyQt5實(shí)現(xiàn)數(shù)據(jù)庫(kù)表格動(dòng)態(tài)增刪改

    Python+PyQt5實(shí)現(xiàn)數(shù)據(jù)庫(kù)表格動(dòng)態(tài)增刪改

    這篇文章主要為大家介紹如何利用Python中的PyQt5模塊實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表格的動(dòng)態(tài)增刪改,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-03-03
  • python 批量下載bilibili視頻的gui程序

    python 批量下載bilibili視頻的gui程序

    這篇文章主要介紹了python 批量下載bilibili視頻的gui程序,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

延安市| 碌曲县| 海城市| 长宁县| 台东县| 内江市| 青神县| 龙山县| 郓城县| 十堰市| 汝城县| 濮阳市| 建宁县| 武城县| 寿宁县| 扎鲁特旗| 绍兴县| 寻乌县| 响水县| 沧源| 荥经县| 曲阜市| 泰来县| 迭部县| 云梦县| 台北市| 抚州市| 甘孜县| 金坛市| 大足县| 如皋市| 德昌县| 巴林左旗| 台江县| 苏州市| 茂名市| 穆棱市| 广州市| 泾阳县| 丰城市| 黄石市|