簡體   English   中英

python pandas:對雙多索引數據幀中的行和列使用 pd.IndexSlice

[英]python pandas: using pd.IndexSlice for both rows and columns in a double multiindex dataframe

我有一個雙多索引數據框,如下所示。 我用 idx = pd.IndexSlice 對行進行切片,但我不知道如何對列進行切片,因此提供了以下數據:

df = pd.DataFrame(data=pd.DataFrame(data=np.random.randint(0, 10, size=(9, 5))))
# rows
list1 = ['2021-01-01','2022-02-01','2022-03-01']
list2 = ['PHOTO', 'QUE','TXR']
combinations = [(x, y) for x in list1 for y in list2]     
df.index = pd.MultiIndex.from_tuples(combinations, names = ["DATE","DB"])
df.index.set_names(["DATE","DB"], inplace=True)
#columns
list1c = [('AB30','ACTIVE','A2'),('CD55','ACTIVE','A1'),('ZT52','UNACTIVE','A2'),('MIKE','PENSIONER','A2'),('ZZ00001','ACTIVE','A1')]
df.columns = pd.MultiIndex.from_tuples(list1c, names = ["UserID","KIND","DEPARTMENT"])

我將行切片如下:

# filtering in rows
idx = pd.IndexSlice

###### ROWS #######
# slicing dates
date_start = '2021-01-01'
date_end   = '2021-02-01'
# slicing databases
databases = ['PHOTO','QUE']

# creating the index sclice for rows
i_s = idx[date_start:date_end, databases]

###### COLUMNS ######
# ??? here mask for the columns i_c = ???

df.loc[i_s, ] 

我的目標是使用相同的方法對列進行切片那么我如何為給我的列生成 IndexSlice 例如:

偽代碼:KIND = ACTIVE DEPARTMENT = A2

我想使用相同的方法,為每個多級定義一個掩碼

您可以使用:

i_c = idx[: , 'ACTIVE', 'A2']

df.loc[i_s, i_c] 

輸出:

UserID             AB30
KIND             ACTIVE
DEPARTMENT           A2
DATE       DB          
2021-01-01 PHOTO      5
           QUE        9

活躍或退休人員

i_c = idx[: , ['ACTIVE', 'PENSIONER'], 'A2']

df.loc[i_s, i_c] 

輸出:

UserID             AB30      MIKE
KIND             ACTIVE PENSIONER
DEPARTMENT           A2        A2
DATE       DB                    
2021-01-01 PHOTO      5         3
           QUE        9         2

使用此代碼,您應該能夠選擇帶有 KIND“ACTIVE”和 DEPARTMENT“A2”的列

columns = (slice(None), 'ACTIVE', 'A2')
df_sliced = df.loc[:, columns]

您還可以使用.xs方法按級別名稱對列進行切片。

例如:

df_sliced = df.xs('ACTIVE', level='KIND', axis=1)

將 DataFrame 切片以僅包含具有 KIND“ACTIVE”的列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM