1. 程式人生 > 實用技巧 >【python】Mutilindex多層索引的取值

【python】Mutilindex多層索引的取值

一,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[:,["京東","唯品會"]]

#%%