以相同的方式访问列和行索引

时间:2017-09-01 13:51:54

标签: python pandas dataframe

很抱歉再次编辑这个问题,但是当我深入研究它时,我意识到如果我可以以相同的方式访问列的值和行索引的值,它归结为问题。对我来说,这看起来很自然,因为行索引和列实际上是非常相似的实体。

例如,如果我定义一个具有两级行多索引的DataFrame,那样:

df = pd.DataFrame(data=None, index=pd.MultiIndex.from_product([['A', 'B'], [1, 2]], names=['X', 'Y']))
df.insert(loc=0, column='DATA', value=[1, 2, 3, 4])

哪个给出了

       DATA
X  Y      

A  1     1
   2     2
B  1     3
   2     4

要访问列值,我可以使用df.DATAdf.loc[:, 'DATA']。因此,要选择DATA为2的所有行,我可以df.loc[df.DATA == 2, :]df.loc[df.loc[:, 'DATA'] == 2, :]

但是,要在索引列Y上执行相同的操作,这不起作用。既不df.Y也不df.loc[:, 'Y']。因此,我无法根据上述索引值选择行:df.loc[df.Y == 2, :]df.loc[df.loc[:, 'Y'] == 2, :]不起作用。

这是一个遗憾,因为这需要编写不同的代码,具体取决于列是普通列还是索引的一部分。或者还有另一种方法可以用于列和索引吗?

1 个答案:

答案 0 :(得分:0)

如果要调用.loc[:,'Y']重置索引,然后调用它,即

df.reset_index().loc[:,'Y']

输出:

0    1
1    2
2    1
3    2
Name: Y, dtype: object

如果您想根据条件选择数据,那么

df.reset_index()[df.reset_index().Y == 2].set_index(['X','Y'])

输出:

    DATA
X Y      
A 2     2
B 2     4