Slice pandas multiindex dataframe using list of in

2019-03-02 02:47发布

This question already has an answer here:

I have a multi-index dataframe that looks like

uid tid text

abc x t1

bcd y t2

uid and tid are the indexes. I have a list of uids, and want to get the rows corresponding to the uids in that list, but keeping the 2nd level index values (tid). I want to do it without running any explicit loop. Is that possible?

1条回答
我欲成王,谁敢阻挡
2楼-- · 2019-03-02 03:16

Data:

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 + mask with 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
查看更多
登录 后发表回答