Python pd.indexlice列表

Python pd.indexlice列表,python,pandas,indexing,Python,Pandas,Indexing,输入: 输出: 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) t.loc(axis=0)[v] pd.concat(

输入:

输出:

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)
t.loc(axis=0)[v]
pd.concat([t.loc[v,:]]*2)
问题:

v=pd.indexlice['A0','B0':'B1']
。我可以访问
t.loc[v,:]

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,v]
中,如何获取以下数据帧

In [13]: t.loc[v,:]
Out[13]:
       foo  bar
A0 B0    0    1
   B1    2    3
我无法指定这些多索引切片器的列表:
t.loc[[v,v],:]
将引发异常:
无法处理的类型:“切片”
。为什么会这样?使用标量时,我可以很容易地列出所需的loc:
t.loc[[('A0','B0'),('A0','B1'),:]
试试:

In [13]: f([v,v])
Out[13]:
       foo  bar
A0 B0    0    1
   B1    2    3
   B0    0    1
   B1    2    3
应该是:

t.loc[tuple(zip(v, v)),:]
试着用上面的形式

u = (['A0', 'A1'], [slice('B0', 'B1', None), slice('B0', 'B1', None)])


使用
loc
的一个鲜为人知且未使用的参数
axis=0

您还可以将axis参数指定为.loc以解释传递的 单轴切片机

输出:

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)
t.loc(axis=0)[v]
pd.concat([t.loc[v,:]]*2)
根据更新的意见和问题澄清解决:

       foo  bar
A0 B0    0    1
   B1    2    3
输出:

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)
t.loc(axis=0)[v]
pd.concat([t.loc[v,:]]*2)

请描述预期输出,我们可以告诉您切片操作的最佳方式。也许也值得一看。我认为这超出了目前索引多索引数据帧的限制。这里有一个解决方法
pd.concat([t.loc[v,:]]*2)
Yep,我最终使用了concat。我只是想知道。。。我认为
t.loc[[v,v],:]
是实现这一点的好语法。谢谢我编辑我的问题是为了在期望的输出上清晰。我编辑我的问题是为了在期望的输出上清晰。