在Pandas中給多層索引降級的方法
# 背景介紹 通常我們不會在Pandas中主動設(shè)置多層索引,但是如果一個字段做多個不同的聚合運算, 比如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 |
# 對一個字段同時用3個聚合函數(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 |
索引是有層次的,虛要通過下面這種方式,個人感覺不是很方便.下面介紹2種方法來解決這個問題
#有層次的索引訪問方法
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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
六個Python3中使用最廣泛的內(nèi)置函數(shù)總結(jié)
這篇文章主要為大家詳細(xì)介紹了六個Python3中使用最廣泛的內(nèi)置函數(shù):Lamdba?函數(shù)、Map?函數(shù)、Filter?函數(shù)、Reduce?函數(shù)、Enumerate?函數(shù)和Zip?函數(shù),需要的可以參考一下2022-08-08
Python使用Streamlit打造高效的測試數(shù)據(jù)生成器
這篇文章主要為大家詳細(xì)介紹了如何利用 Python 的 Streamlit 和 Faker 庫,快速構(gòu)建一個簡單實用的測試數(shù)據(jù)生成器,幫助測試工程師一鍵生成高質(zhì)量的測試數(shù)據(jù),感興趣的可以了解下2025-04-04
Python Numpy運行報錯:IndexError: too many in
在使用Numpy進(jìn)行數(shù)組操作時,經(jīng)常會遇到各種錯誤,其中,IndexError: too many indices for array是一種常見的錯誤,它通常發(fā)生在嘗試使用一個過多維度的索引來訪問一個較低維度的數(shù)組時,本文介紹了Python Numpy報錯的解決辦法,需要的朋友可以參考下2024-07-07
400多行Python代碼實現(xiàn)了一個FTP服務(wù)器
400多行Python代碼實現(xiàn)了一個FTP服務(wù)器,實現(xiàn)了比之前的xxftp更多更完善的功能2012-05-05

