【python】Mutilindex多層索引的取值
阿新 • • 發佈:2020-08-05
一,Mutilindex多層索引的取值
1. 通過get_list自定義函式建立二維表格資料
import pandas as pd import numpy as np np.random.seed(123) def get_list(items,lens = 300): return pd.Series(items).sample(n=lens,replace=True).to_list() df = pd.DataFrame({ "服裝名稱": get_list(["T恤","牛仔套裝","中國風套裝","西裝"]), "尺碼": get_list(["S","M","L"]), "平臺": get_list(["唯品會","拼多多","淘寶","京東"]), "銷量": get_list([2,5,8]) }) df.head(3)
2. 通過pivot_table透視表函式統計銷量資料。並按照服裝名稱,平臺,尺碼指定行跟列的index
#%% df = pd.pivot_table( df, index= ["服裝名稱"], columns= ["平臺","尺碼"], values= "銷量",#注意這裡統計的只有一個銷量,一定不要用列表。 aggfunc= sum #對銷量做統計) df
3. 檢視DataFrame的index行索引及columns列索引
#%% df.index #%% df.columns
4. 對指定列名範圍的取值
註釋:這裡我們直接把京東這一列包含的所有內容取出來。注意京東這列其實相當於Excel表中的單元格合併。那麼下方包含"S","M","L"尺碼的三列資料。如果df["京東"]的話會把這三列的值一併取出。
#%% #取京東的所有值 df["京東"] #%%
5. 通過掩碼條件判斷取出資料
#%% #取唯品會L型號銷量大於30的所有值 df[df["唯品會"]["L"]>30] #%%
6. 每一個columns其實都是一個元組。我們可以通過元組來取出一組或者多組想要的資料
#%% #選擇單個列資料 df[('京東', 'S')] #%% #選擇多列資料(京東平臺S碼及唯品會平臺L碼的值) df[[('京東', 'S'),('唯品會', 'L')]] #%%
7. 通過swaplevel函式指定引數實現列名互換從而實現對資料的篩選
#%% #選出所有平臺中所有L碼的銷量值 df.swaplevel(axis=1)["L"] #swplevel代表交換的意思。axis=1代表0列跟1列互換 #%%
8. 通過切片實現指定行索引及列索引的資料
#%% #通過切片選出京東平臺中所有中國風套裝的銷量 df.loc["中國風套裝":"中國風套裝",(["京東"])] #%%
9. 通過切片對指定行索引及列索引部分資料的切片操作。
#%% #選取唯品會及淘寶平臺,所有商品的S碼和L碼的銷量值 df.loc[:,(["唯品會","淘寶"],["S","L"])] #%%
10. 通過slice類對列索引進行切片操作
註釋:slice()中雙引號的元素間雖然寫的時逗號,但是代表從第一個元素切片到第二個元素的意思。如果中間還包含其他元素,那麼也會一併被切片進去。第二個逗號代表第二層指定的值。
#%% #通過slice切片來選取唯品會到淘寶的所有M碼的資料 df.loc[:,(slice("唯品會","淘寶"),"M")] #%%
11. 通過多層元組的指定對列索引進行資料選取。
#%% #也可以通過元祖選擇想要選取的列()中的丟個元素代表平臺,第二個元素代表尺碼 df.loc[:,[("唯品會","M"),("拼多多","L"),("淘寶","S")]] #%%
12. slice函式的使用不光可以對列名,也可以對第二層資料範圍中值的指定也同樣生效
#%% #也可以選擇多個平臺的多個尺碼值 df.loc[:,(slice("京東","唯品會"),slice("L","S"))] #%%
13. 也可以直接對多個列名,類似於列表的方式指定篩選出指定列名下包含的所有資料
註釋:以下方法同上述 df.loc[:,(slice("京東","唯品會"),slice("L","S"))]其實效果是一樣的
#跟上述方法實現效果其實是一樣的 df.loc[:,["京東","唯品會"]] #%%