2017-09-30 66 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