2017-09-30 3 views

Répondre

1

données:

L = ['abc', 'bcd'] 

print (df) 
     text 
uid tid  
abc x  t1 
abc1 x  t1 
bcd y  t2 

1. slicers

idx = pd.IndexSlice 
df1 = df.loc[idx[L,:],:] 

2. boolean indexing + masque avec get_level_values + isin:

df1 = df[df.index.get_level_values(0).isin(L)] 

3. query, docs:

df1 = df.query('@L in uid') 
print (df1) 
     text 
uid tid  
abc x  t1 
bcd y  t2 
+0

grâce @jezrael. Avec l'approche un, j'obtiens 'MultiIndex Slicing nécessite que l'index soit entièrement tuple len (2), lexsort depth (0)' erreur. Mais 2 œuvres. Lequel est le plus efficace? J'ai un énorme cadre de données. – Rakib

+0

le plus rapide est d'abord trier par 'df = df.sort_index()' et ensuite utiliser la première méthode. 'trier 'est expliqué [' In 97 '] (http://pandas.pydata.org/pandas-docs/stable/advanced.html#sorting-a-multiindex) – jezrael