2017-09-01 48 views
0

對不起,再次編輯問題,但當我深入挖掘時,我意識到它歸結爲問題是否可以訪問列的值和行索引的值以同樣的方式。對我來說,這看起來很自然,因爲行索引和列實際上是非常相似的實體。以同樣的方式訪問列和行索引

例如,如果我定義與兩電平行多索引那樣的數據幀:

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 

要訪問的列值I可以,例如,使用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, :]不起作用。

這是一個遺憾,因爲這需要編寫不同的代碼,具體取決於列是普通列還是索引的一部分。或者有另一種方法可以對列和索引起作用嗎?

+0

您的意思是X是列索引或行索引中項目的名稱? –

+0

在列索引中。 – Konstantin

+0

如果你做了'df ['X']。loc [condition]'? –

回答

0

如果你想打電話.loc[:,'Y']重置索引,然後即稱之爲

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

輸出:

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

如果您想選擇基於condtion然後

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

輸出:

 
    DATA 
X Y  
A 2  2 
B 2  4