很抱歉再次编辑这个问题,但是当我深入研究它时,我意识到如果我可以以相同的方式访问列的值和行索引的值,它归结为问题。对我来说,这看起来很自然,因为行索引和列实际上是非常相似的实体。
例如,如果我定义一个具有两级行多索引的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.DATA
或df.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, :]
不起作用。
这是一个遗憾,因为这需要编写不同的代码,具体取决于列是普通列还是索引的一部分。或者还有另一种方法可以用于列和索引吗?
答案 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