2017-09-30 77 views
1

我有一個多指標數據框,看起來像切片大熊貓多指標數據框中使用索引列表值

UID TID文本

ABC X T1

BCDŸT2

UIDtid是索引。我有一個列表uid s,並且想要獲得對應於該列表中用戶的行,但保留第二級索引值(tid)。我想不做任何顯式的循環。那可能嗎?

回答

1

數據:

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 +掩模get_level_values + isin

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

3. querydocs

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

感謝@jezrael。使用方法一,我得到'MultiIndex Slicing要求索引完全是放大的元組len(2),lexsort depth(0)'的錯誤。但2件作品。哪種效率最高?我有一個巨大的數據框。 – Rakib

+0

最快的是先用'df = df.sort_index()'排序,然後用第一種方法。 'sort'解釋['97'](http://pandas.pydata.org/pandas-docs/stable/advanced.html#sorting-a-multiindex) – jezrael

相關問題