首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pd.IndexSlice列表

pd.IndexSlice列表
EN

Stack Overflow用户
提问于 2021-01-15 01:18:01
回答 2查看 59关注 0票数 2

输入:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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,:]

代码语言:javascript
复制
In [13]: t.loc[v,:]
Out[13]:
       foo  bar
A0 B0    0    1
   B1    2    3

如何从[v,v]获取以下数据帧?

代码语言:javascript
复制
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')],:]

EN

回答 2

Stack Overflow用户

发布于 2021-01-15 02:56:28

尝试:

代码语言:javascript
复制
t.loc[tuple(zip(v, v)),:]

它应该是:

代码语言:javascript
复制
u = (['A0', 'A1'], [slice('B0', 'B1', None), slice('B0', 'B1', None)])

试着用上面的形式。

代码语言:javascript
复制
t.loc[u,:]

代码语言:javascript
复制
        foo bar
A0  B0  0   1
    B1  2   3
A1  B0  8   9
    B1  10  11
票数 1
EN

Stack Overflow用户

发布于 2021-01-15 03:07:59

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

还可以将

参数指定给.loc,以解释单个轴上传递的切片器。

Advanced indexing with hierarchical index

代码语言:javascript
复制
t.loc(axis=0)[v]

输出:

代码语言:javascript
复制
       foo  bar
A0 B0    0    1
   B1    2    3

根据更新的评论和问题说明解决问题:

代码语言:javascript
复制
pd.concat([t.loc[v,:]]*2)

输出:

代码语言:javascript
复制
       foo  bar
A0 B0    0    1
   B1    2    3
   B0    0    1
   B1    2    3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65723761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档