在Pandas中給多層索引降級的方法
# 背景介紹 通常我們不會在Pandas中主動(dòng)設(shè)置多層索引,但是如果一個(gè)字段做多個(gè)不同的聚合運(yùn)算, 比如sum, max這樣形成的Column Level是有層次的,這樣閱讀非常方便,但是對編程定位比較麻煩. # 數(shù)據(jù)準(zhǔn)備
import pandas as pd import numpy as np df = pd.DataFrame(np.arange(0, 14).reshape(7,2),columns =['a','b'] ) df.a = df.a %3 df['who'] = 'Bob' df.loc[df.a%4==0,'who'] = 'Alice'
| a | b | who | |
|---|---|---|---|
| 0 | 0 | 1 | Alice |
| 1 | 2 | 3 | Bob |
| 2 | 1 | 5 | Bob |
| 3 | 0 | 7 | Alice |
| 4 | 2 | 9 | Bob |
| 5 | 1 | 11 | Bob |
| 6 | 0 | 13 | Alice |
# 對一個(gè)字段同時(shí)用3個(gè)聚合函數(shù)
gp1 = df.groupby('who').agg({'b':[sum,np.max, np.min], 'a':sum})
gp1
| b | a | |||
|---|---|---|---|---|
| sum | amax | amin | sum | |
| who | ||||
| Alice | 8.0 | 7.0 | 1.0 | 0 |
| Bob | 28.0 | 11.0 | 3.0 | 6 |
索引是有層次的,虛要通過下面這種方式,個(gè)人感覺不是很方便.下面介紹2種方法來解決這個(gè)問題
#有層次的索引訪問方法
gp1.loc['Bob', ('b', 'sum')]
28.0
# 直接去除一層
gp2 = gp1.copy(deep=True) gp2.columns = gp1.columns.droplevel(0) gp2
| sum | amax | amin | sum | |
|---|---|---|---|---|
| who | ||||
| Alice | 8.0 | 7.0 | 1.0 | 0 |
| Bob | 28.0 | 11.0 | 3.0 | 6 |
# 把2層合并到一層
gp3 = gp1.copy(deep=True) gp3.columns = ["_".join(x) for x in gp3.columns.ravel()] gp3
| b_sum | b_amax | b_amin | a_sum | |
|---|---|---|---|---|
| who | ||||
| Alice | 8.0 | 7.0 | 1.0 | 0 |
| Bob | 28.0 | 11.0 | 3.0 | 6 |
以上這篇在Pandas中給多層索引降級的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
深入探究Python中的多進(jìn)程模塊用法實(shí)例
多進(jìn)程是計(jì)算機(jī)編程中的一個(gè)概念,也可以說是一種可用于實(shí)現(xiàn)并行性和利用多個(gè) CPU 內(nèi)核或處理器并發(fā)執(zhí)行任務(wù)的技術(shù),在本文中,我們將學(xué)習(xí)有關(guān) python 中多進(jìn)程處理的所有知識、理論和實(shí)際使用代碼2024-01-01
六個(gè)Python3中使用最廣泛的內(nèi)置函數(shù)總結(jié)
這篇文章主要為大家詳細(xì)介紹了六個(gè)Python3中使用最廣泛的內(nèi)置函數(shù):Lamdba?函數(shù)、Map?函數(shù)、Filter?函數(shù)、Reduce?函數(shù)、Enumerate?函數(shù)和Zip?函數(shù),需要的可以參考一下2022-08-08
Python實(shí)現(xiàn)語音識別vosk的示例代碼
Vosk是一個(gè)功能強(qiáng)大且易于使用的語音識別工具包,它提供了Python綁定,使得在Python中使用Vosk變得非常方便,本文主要介紹了Python實(shí)現(xiàn)語音識別vosk的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
Python使用Streamlit打造高效的測試數(shù)據(jù)生成器
這篇文章主要為大家詳細(xì)介紹了如何利用 Python 的 Streamlit 和 Faker 庫,快速構(gòu)建一個(gè)簡單實(shí)用的測試數(shù)據(jù)生成器,幫助測試工程師一鍵生成高質(zhì)量的測試數(shù)據(jù),感興趣的可以了解下2025-04-04
Python Numpy運(yùn)行報(bào)錯(cuò):IndexError: too many in
在使用Numpy進(jìn)行數(shù)組操作時(shí),經(jīng)常會遇到各種錯(cuò)誤,其中,IndexError: too many indices for array是一種常見的錯(cuò)誤,它通常發(fā)生在嘗試使用一個(gè)過多維度的索引來訪問一個(gè)較低維度的數(shù)組時(shí),本文介紹了Python Numpy報(bào)錯(cuò)的解決辦法,需要的朋友可以參考下2024-07-07
400多行Python代碼實(shí)現(xiàn)了一個(gè)FTP服務(wù)器
400多行Python代碼實(shí)現(xiàn)了一個(gè)FTP服務(wù)器,實(shí)現(xiàn)了比之前的xxftp更多更完善的功能2012-05-05

