3

文字列でラベル付けされたレベルと整数でラベル付けされたレベルを持つ MultiIndex があります。

import pandas as pd
metrics = ['PT', 'TF', 'AF']
n_replicates = 3
n_nodes = 6
cols = [(r,m,n) for r in range(n_replicates) for m in metrics for n in range(n_nodes)]
cols = pd.MultiIndex.from_tuples(cols,names = ['Replicates', 'Metrics', 'Nodes'])

ind = range(5)
df = pd.DataFrame(columns=cols, index=ind)
df.sortlevel(level=0, axis=1, inplace=True)

整数ラベルの付いた単一の列を選択したい場合、問題ありません:

df[2,'AF',10]

ただし、範囲を選択しようとすると:

df[1:4,'AF',10]
TypeError: 
(No message given)

最後のレベルを省略すると、別のエラーが発生します。

df.sortlevel(level=0,axis=1,inplace=True)
df[1:4,'AF']
TypeError: unhashable type

整数を列ラベルとして使用しているときは、火遊びをしていると思います。それらをすべて文字列として単純に持つ「安全な」ルートはありますか?または、整数ラベルで MuliIndex データフレームにインデックスを付ける他の方法はありますか?

編集: .loc を使用する必要があることは明らかです。良い。ただし、MultiIndex の下位レベルとのやり取りについては、まだ明確ではありません。

df.loc[:,:] #Good
df.loc[:,1:2] #Good
df.loc[:,[1:2, 'AF']]
SyntaxError: invalid syntax
df.loc[:,1:2].xs('AF', level='Metrics', axis=1) #Good

最後の行は私が使用する必要があるものですか?もしそうなら、大丈夫です。それは、私がより良い方法を知らないと感じさせるのに十分な長さです. 助けてくれてありがとう!

4

0 に答える 0