Andy Hayden cevabı (index.levels[blah]
) bazı senaryolar için harika ama diğerlerinde garip davranışlara yol açabilir. Anladığım kadarıyla, Pandalar, benzer şekilde indeksli DataFram'ların bellekte yer kaplamasından kaçınmak için mümkünse endeksleri "yeniden kullanmaları" için büyük uzunluklara giderler.
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')
yerine bir kişi, diğer iş parçacığı üzerinde belirttiği gibi beklenen
Index([u'John', u'Josh'], dtype='object')
Index([u'Alex', u'John', u'Josh'], dtype='object')
birden çıkışı, bir deyim çok doğal görünüyor ve: I've found the following annoying behavior Sonuç olarak düzgün çalışır:
small.index.get_level_values('Person').unique()
large.index.get_level_values('Person').unique()
Umarım bu, başka birinin, karşılaştığım beklenmedik davranışlardan kaçmasına yardım eder.
Örneğini anlamıyorum. uniq_b kullanılmıyor mu? –
ah, sanırım anladım. Sadece B'nin eşsiz değerlerini 'bilmek' istediniz. –
Eğer mümkün değilse, kabul edilen cevabı 8'e6 değiştirmeyi düşünmelisiniz. – KobeJohn