如何切片多索引和列?

2024-06-24 13:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

midx = pd.MultiIndex(levels=[['zero', 'one'], ['x', 'y']],labels = [[1, 1, 0, 0],[1, 0, 1, 0]])
        df = pd.DataFrame(np.random.randn(4, 2), index=midx)

>>midx
               0         1
one  y  0.477304  0.247328
     x -1.267339 -1.779735
zero y  0.812613  1.119952
     x  0.092788  0.384020

一种更具可读性的方法?我试过df.loc['one',1]不走运

df.xs('one')[1]
Out[44]: 
y    0.247328
x   -1.779735

Tags: 方法dataframedfindexlabelsnprandomone
2条回答

作为pd.IndexSlice的替代方法,您可以使用pd.DataFrame.query并在单独的步骤中选择列:

res = df.query('ilevel_0 == "one"').loc[:, 1]

根据the docsilevel_0用于表示第一个未命名索引。为清楚起见,如果在构造数据帧时定义了正名,则可以将其替换为正名

IIUC公司:

In [74]: df.loc['one', 1]
Out[74]:
y    0.247328
x   -1.779735
Name: 1, dtype: float64

或者更明确地说:

In [80]: df.loc[pd.IndexSlice['one', :], 1]
Out[80]:
one  y    0.247328
     x   -1.779735
Name: 1, dtype: float64

相关问题 更多 >