2017-09-01 4 views
0

もう一度質問を編集して申し訳ありませんが、深く掘り下げたところで、列の値と行インデックスの値にアクセスできるかどうかは疑問に思っていました同じやり方で。これは、私にとって、行インデックスと列は実際には非常に似たエンティティなので、非常に自然なように見えます。例えば同じ方法で列と行のインデックスにアクセスする

、私はそのような2レベルの列マルチインデックスを持つデータフレーム定義した場合:

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

Xは、列インデックスまたは行インデックスのアイテムの名前ですか? –

+0

列のインデックスにあります。 – Konstantin

+0

'df ['X']を実行するとどうなりますか?loc [condition]'? –

答えて

0

あなたはインデックスをリセット.loc[:,'Y']を呼び出した後、すなわち、それを呼び出したい場合は

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

出力:あなたがcondtionその後、

df.reset_index()[df.reset_index().Y == 2].set_index(['X','Y']) 
に基づいてデータを選択したい場合は

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

出力:

 
    DATA 
X Y  
A 2  2 
B 2  4 
関連する問題