我有一个双多索引 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,例如:
伪代码:类型=活动部门= A2
我想使用相同的方法,为每个多级定义一个掩码
2条答案
按热度按时间hmae6n7t1#
您可以用途:
输出:
现役军人或退休军人
输出:
1yjd4xko2#
使用此代码,您应该能够选择类型为“ACTIVE”且部门为“A2”的列
还可以使用
.xs
方法按列的级别名称对列进行切片。例如:
将DataFrame切片为仅包含KIND为“ACTIVE”的列。