输入:
midx = pd.MultiIndex.from_product([['A0','A1'], ['B0','B1','B2','B3']])
columns = ['foo', 'bar']
t = pd.DataFrame(np.arange(16).reshape((len(midx), len(columns))),
index=midx, columns=columns)输出:
In [6]: t
Out[6]:
foo bar
A0 B0 0 1
B1 2 3
B2 4 5
B3 6 7
A1 B0 8 9
B1 10 11
B2 12 13
B3 14 15问题:
让v = pd.IndexSlice['A0','B0':'B1']来吧。我可以访问t.loc[v,:]
In [13]: t.loc[v,:]
Out[13]:
foo bar
A0 B0 0 1
B1 2 3如何从[v,v]获取以下数据帧?
In [13]: f([v,v])
Out[13]:
foo bar
A0 B0 0 1
B1 2 3
B0 0 1
B1 2 3我不能指定这些多索引切片器的列表:t.loc[[v,v],:]将引发一个异常:Unashable type: 'slice'。为甚麽呢?在使用标量时,我可以很容易地列出所需的locs:t.loc[[('A0','B0'),('A0','B1')],:]。
发布于 2021-01-15 02:56:28
尝试:
t.loc[tuple(zip(v, v)),:]它应该是:
u = (['A0', 'A1'], [slice('B0', 'B1', None), slice('B0', 'B1', None)])试着用上面的形式。
t.loc[u,:] foo bar
A0 B0 0 1
B1 2 3
A1 B0 8 9
B1 10 11发布于 2021-01-15 03:07:59
使用loc的一个鲜为人知且从未使用过的参数axis=0
还可以将
参数指定给.loc,以解释单个轴上传递的切片器。
Advanced indexing with hierarchical index
t.loc(axis=0)[v]输出:
foo bar
A0 B0 0 1
B1 2 3根据更新的评论和问题说明解决问题:
pd.concat([t.loc[v,:]]*2)输出:
foo bar
A0 B0 0 1
B1 2 3
B0 0 1
B1 2 3https://stackoverflow.com/questions/65723761
复制相似问题