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],:]
是实现这一点的好语法。谢谢我编辑我的问题是为了在期望的输出上清晰。我编辑我的问题是为了在期望的输出上清晰。