使用索引值列表切片Pandas多级索引数据框

3
我有一个多级索引数据框,长这样: uid tid text
abc x t1
bcd y t2
其中,uid和tid是索引。我有一组uid列表,想要获取与该列表中的uid相对应的行,但保留第二级索引值(tid)。我希望在不运行任何显式循环的情况下完成。是否可能实现?
1个回答

3

数据:

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. 布尔索引 + 用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

感谢@jezrael。使用方法一,我得到了“MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)”错误。但是方法二可以正常运行。哪种方法更有效率?我有一个非常大的数据框。 - Rakib
最快的方法是首先按 df = df.sort_index() 进行排序,然后再使用第一种方法。sorting 的解释可在 'In 97' 中找到。 - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接