2014-11-25 5 views
13

Che cos'è esattamente lo lexsort_depth di un dataframe con più indici? Perché deve essere ordinato per l'indicizzazione?Che cosa è esattamente il lexsort_depth di un Dataframe con più indici?

Ad esempio, ho notato che, dopo aver costruito manualmente una dataframe multiindice df con colonne organizzate in tre livelli, se provo a fare:

idx = pd.IndexSlice 
df[idx['foo', 'bar']] 

ottengo:

KeyError: 'Key length (2) was greater than MultiIndex lexsort depth (0)' 

ea questo punto, è df.columns.lexsort_depth0

Tuttavia, se faccio, come raccomandato here e here:

df = df.sortlevel(0,axis=1) 

allora la sezione trasversale opere indicizzazione. Perché? Che cos'è esattamente lexsort_depth e perché l'ordinamento con sortlevel corregge questo tipo di indicizzazione?

risposta

11

lexsort_depth è il numero di livelli di un multiindice che sono ordinati in modo lessicale. Cioè, in un ordine a-b-c-1-2-3 (ordinamento normale).

Così elemento indicizzazione sarà lavoro se un multi-indice non è ordinato, ma le ricerche può essere un po 'più lento (in 0.15.2, questo mostrerà un PerformanceWarning per fare questo tipo di ricerche, vedere here

La ragione per cui l'ordinamento in generale è una buona idea è che i panda sono in grado di usare l'indicizzazione basata su hash per capire dove la posizione si trova in un determinato livello indipendentemente per il livello., Quindi puoi usare questi indicizzatori per trovare la finale posizioni

Pandas sfrutta lo np.searchsorted per trovare questi luoghi quando è ordinato. ordinati, quindi devi ricorrere a metodi diversi (più lenti).

here è il codice che esegue questa operazione.

Problemi correlati