アンディ・ヘイデンの答え(index.levels[blah]
は)いくつかのシナリオのための素晴らしいですが、他人に奇妙な行動につながることができます。私の理解では、Pandasは、同様に索引付けされた多数のDataFramesの索引にメモリー内の領域を占有することを避けるために、できる限りインデックスを「再利用」することに長らく関わっています。
import pandas as pd
import numpy as np
np.random.seed(0)
idx = pd.MultiIndex.from_product([['John', 'Josh', 'Alex'], list('abcde')],
names=['Person', 'Letter'])
large = pd.DataFrame(data=np.random.randn(15, 2),
index=idx,
columns=['one', 'two'])
small = large.loc[['Jo'==d[0:2] for d in large.index.get_level_values('Person')]]
print small.index.levels[0]
print large.index.levels[0]
Index([u'Alex', u'John', u'Josh'], dtype='object')
Index([u'Alex', u'John', u'Josh'], dtype='object')
むしろ1人が他のスレッド上で指摘したように期待
Index([u'John', u'Josh'], dtype='object')
Index([u'Alex', u'John', u'Josh'], dtype='object')
より出力し、1つのイディオム非常に自然なようだと:I've found the following annoying behavior結果、正しく動作する:
small.index.get_level_values('Person').unique()
large.index.get_level_values('Person').unique()
これは、他の誰かが私が遭遇した超予期しない動作をかわすのを助けることを望みます。
私はあなたの例を理解していません。 uniq_bは使用されていませんか? –
ああ、私はそれを得ると思います。あなたはB. okのユニークな値を '知る'ことを望んでいました。 –
セスの可能性がある場合は、受け入れられた回答を8one6に変更することを検討する必要があります。 – KobeJohn