Pandas 多層索引操作的實(shí)現(xiàn)
Pandas 多層索引操作
多重索引的創(chuàng)建方式有很多,這里我們來看幾個常見的方式:
(1)pd.MultiIndex.from_arrays
df = pd.DataFrame(
[[621,582,621,591],
[615,585,616,597],
[581,574,579,585],
[596,565,584,561]])
# 數(shù)組
# 每個數(shù)組對應(yīng)著一個層級的索引值
arrays = [['北京','北京','上海','上海'],['北大','清華','上交','復(fù)旦']]
mindex = pd.MultiIndex.from_arrays(arrays, names=['城市','大學(xué)'])
# 給df行索引賦值
df.index = mindex

(2)pd.MultiIndex.from_frame
# dataframe
# 創(chuàng)建一個dataframe,方式與元組類似,每個元組對應(yīng)一對多級索引值
frame = pd.DataFrame([('北京','北大'),('北京','清華'),('上海','上交'),('上海','復(fù)旦')])
mindex = pd.MultiIndex.from_frame(frame, names=['城市','大學(xué)'])
# 給df行索引賦值
df.index = mindex

(3)pd.MultiIndex.from_tuples
df = pd.DataFrame(
[[621,582,621,591],
[615,585,616,597],
[581,574,579,585],
[596,565,584,561]])
# 元組
# 每個元組是對應(yīng)著一對多級索引
tuples = [('北京','北大'),('北京','清華'),('上海','上交'),('上海','復(fù)旦')]
mindex = pd.MultiIndex.from_tuples(tuples, names=['城市','大學(xué)'])
# 給df行索引賦值
df.index = mindex

(4)pd.MultiIndex.from_product
當(dāng)我們考慮迭代兩個對象的元素對時,可以優(yōu)先考慮使用pd.MultiIndex.from_product()來建立多重索引。
# product笛卡爾積
city = ['北京', '上海']
college = ['北大','清華','上交','復(fù)旦']
mindex1 = pd.MultiIndex.from_product([city,college], names=['城市','大學(xué)'])
mindex1
MultiIndex(levels=[['上海', '北京'], ['上交', '北大', '復(fù)旦', '清華']],
codes=[[1, 1, 1, 1, 0, 0, 0, 0], [1, 3, 0, 2, 1, 3, 0, 2]],
names=['城市', '大學(xué)'])
對兩個序列生成笛卡爾積,即兩兩組合,結(jié)果如上。這種方式生成的索引和我們上面想要的形式不同,因此對行索引不適用
# product生成column列索引 year = ['2022','2023'] pro = ['計(jì)算機(jī)','土木'] mcol = pd.MultiIndex.from_product([year,pro], names=['年份','專業(yè)']) # 對df的行索引、列索引賦值 df.index = mindex df.columns = mcol display(df)

np.r_[]用法:
np.r_[]函數(shù)是用于連接數(shù)組的函數(shù),類似于concatenate函數(shù),但可以在一維數(shù)組和多維數(shù)組之間進(jìn)行拼接。具體用法如下:
使用np.r_[a, b]將兩個數(shù)組a和b按行連接(在行方向上進(jìn)行拼接)。
使用np.r_[a, b]對多個數(shù)組進(jìn)行按行連接,可以同時連接多個數(shù)組。
使用np.r_[(a, b), (c, d)]將兩個二維數(shù)組a和b按行連接,并將結(jié)果與二維數(shù)組c和d按行連接,最終得到一個拼接后的二維數(shù)組。
np.r_還支持切片操作,如np.r_[:5, 7:10]表示將索引為0到4的元素和索引為7到9的元素按行連接。
總而言之,np.r_[]函數(shù)可以在行方向上將多個數(shù)組或切片進(jìn)行連接,生成一個新的數(shù)組。
讀取excel方式
def index_info():
address =os.path.join('.','index_def.xlsx')
criterion = pd.read_excel(address)
multi_idx1=criterion['分類'].unique()
multi_idx2=criterion['二級分類'].unique()
idx1 = [multi_idx1[0]]*3+[multi_idx1[2]]*3+[multi_idx1[3]]*16
idx2 = [multi_idx2[0]]*3+['-']*3+[multi_idx2[2]]*6+[multi_idx2[3]]*6+[multi_idx2[4]]*4
criterion.index=pd.MultiIndex.from_arrays([idx1,idx2,criterion.index+1],names=['一級分類','二級分類','編號'])
ctr_df = criterion.iloc[:,np.r_[3,5]].fillna('-')
return ctr_df
ctr_df = index_info()
ctr_df到此這篇關(guān)于Pandas 多層索引操作的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Pandas 多層索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python如何實(shí)現(xiàn)后端自定義認(rèn)證并實(shí)現(xiàn)多條件登陸
這篇文章主要介紹了Python如何實(shí)現(xiàn)后端自定義認(rèn)證并實(shí)現(xiàn)多條件登陸,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Python編寫電話薄實(shí)現(xiàn)增刪改查功能
這篇文章主要為大家詳細(xì)介紹了Python編寫電話薄實(shí)現(xiàn)增刪改查功能的相關(guān)資料,感興趣的朋友可以參考一下2016-05-05
python使用pandas實(shí)現(xiàn)數(shù)據(jù)分割實(shí)例代碼
這篇文章主要介紹了python使用pandas實(shí)現(xiàn)數(shù)據(jù)分割實(shí)例代碼,介紹了使用pandas實(shí)現(xiàn)對dataframe格式的數(shù)據(jù)分割成時間跨度相等的數(shù)據(jù)塊,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
python中使用sys模板和logging模塊獲取行號和函數(shù)名的方法
這篇文章主要介紹了python中使用sys模板和logging模塊獲取行號和函數(shù)名的方法,需要的朋友可以參考下2014-04-04
Python中的數(shù)字類型與轉(zhuǎn)換技巧示例講解
這篇文章主要為大家介紹了Python中的數(shù)字類型與轉(zhuǎn)換技巧示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
python pandas 對時間序列文件處理的實(shí)例
今天小編就為大家分享一篇python pandas 對時間序列文件處理的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06

