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')]