Python 熊猫:使用数组索引所有值

Python 熊猫:使用数组索引所有值,python,pandas,Python,Pandas,我想选择具有特定索引的所有行。我的数据框如下所示: >>> df Code Patient Date 1 2003-01-12 00:00:00 a 2003-02-13 00:00:00 b 2003-02-14 00:00:00 ba 2 2001-1-17 22:00:00 z 2002-1

我想选择具有特定索引的所有行。我的数据框如下所示:

>>> df
                            Code
Patient Date                        
1       2003-01-12 00:00:00  a
        2003-02-13 00:00:00  b
        2003-02-14 00:00:00  ba
2       2001-1-17 22:00:00  z
        2002-1-21 00:00:00  d
        2003-1-21 00:00:00  a
        2005-12-1 00:00:00  ba
选择第一个(患者)索引之一有效:

>>> df.loc[1]
                            Code
Patient Date                        
1       2003-01-12 00:00:00  a
        2003-02-13 00:00:00  b
        2003-02-14 00:00:00  ba
但选择第一个(患者)索引的倍数不会:

>>> df.loc[[1, 2]]
                            Code
Patient Date                        
1       2003-01-12 00:00:00  a
2       2001-1-17 22:00:00  z
但是,我希望获得整个数据帧(结果是if
[1,1,1,2]
即原始数据帧)

当使用单个索引时,它可以正常工作。例如:

>>> df.reset_index().set_index("Patient").loc[[1, 2]]
                   Date     Code
Patient                          
1       2003-01-12 00:00:00  a
        2003-02-13 00:00:00  b
        2003-02-14 00:00:00  ba
2       2001-1-17 22:00:00  z
        2002-1-21 00:00:00  d
        2003-1-21 00:00:00  a
        2005-12-1 00:00:00  ba
TL;DR为什么在使用多个索引时必须重复索引,而在使用单个索引时则不必重复索引

编辑:显然,它可以类似于:

>>> df.loc[df.index.get_level_values("Patient").isin([1, 2])]

但我觉得这很肮脏。这是一种方式吗?或者是其他更好的方式吗?

对于Pandas verison 0.14,根据上述评论,推荐的方式是:

df.loc[([1,2],),:]

df.loc[1][1:2]应选择两行哪种版本?你能显示df.info()吗?@Jeff我也能用0.13和0.14得到这个。只有在0.14中,你才能做
df.loc[([1,2],),:]
来得到你想要的。@joris工作起来很有魅力!非常感谢!顺便问一下,是否可以在不使用
KeyError
s的情况下实现相同的功能。也就是说,当3缺失时,如果我执行
df.loc[([1,3],),:]
,则只返回1的结果