Python 多次从多索引数据帧中获取同一行

Python 多次从多索引数据帧中获取同一行,python,pandas,dataframe,multi-index,Python,Pandas,Dataframe,Multi Index,例如,假设我有一个多索引数据帧和一个常规数据帧 index = [['foo','foo','bar','bar'],['spam','eggs','spam','eggs']] arr = np.arange(1,13).reshape((4,3)) df_multi = pd.DataFrame(arr, index = index) df = pd.DataFrame(arr) 如果我需要常规数据帧中的多行,我将按如下方式执行: request = [0,0,1,0,1,2] rows

例如,假设我有一个多索引数据帧和一个常规数据帧

index = [['foo','foo','bar','bar'],['spam','eggs','spam','eggs']]
arr = np.arange(1,13).reshape((4,3))

df_multi = pd.DataFrame(arr, index = index)
df = pd.DataFrame(arr)
如果我需要常规数据帧中的多行,我将按如下方式执行:

request = [0,0,1,0,1,2]
rows = df.loc[request]
rows
对象是一个新的数据帧,其中每一行都来自
df
,其顺序由
request
定义,这里对我来说关键的部分是
request
的顺序保持不变,我可以通过多次请求来获得所需的同一行

但如果我对多索引数据帧做同样的事情:

request = (['foo','foo', 'foo'], ['spam', 'eggs', 'spam'])
rows    = df_multi.loc(axis=0)[request]
我将只从我的请求中获得唯一的行,并对它们进行排序。 正如我所期望的那样,情况将与前一个案例一样,不按要求分类和重复


我怎样才能做到这一点

传递一个定义每行多索引值的元组表,例如使用
zip(*request)

rows=df_multi.loc[zip(*请求)]
排
出[51]:
0  1  2
foo垃圾邮件1 2 3
鸡蛋4 5 6
垃圾邮件1 2 3
注意:
list(zip(*request))
的计算结果为

[('foo', 'spam'), ('foo', 'eggs'), ('foo', 'spam')]