例如,假设我有一个多索引数据框和一个常规数据框
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)
如果我需要常规 DataFrame 中的多行,我会按如下方式执行:
request = [0,0,1,0,1,2]
rows = df.loc[request]
rows
对象是一个新的 DataFrame,其中每一行都按照 request
定义的顺序来自 df
,这对我来说是关键部分这里,请求
的顺序保持不变,通过多次请求,我可以根据需要多次获取同一行。
但是如果我对 MultiIndexed DataFrame 做同样的事情:
request = (['foo','foo', 'foo'], ['spam', 'eggs', 'spam'])
rows = df_multi.loc(axis=0)[request]
我只会从我的请求中获取唯一的行,并且会对它们进行排序。 正如我所期望的,情况会像之前的情况一样,未排序并按要求重复。
我怎样才能实现这个目标?
最佳答案
传递定义每行 MultiIndex 值的可迭代元组,例如使用zip(*request)
:
rows = df_multi.loc[zip(*request)]
rows
Out[51]:
0 1 2
foo spam 1 2 3
eggs 4 5 6
spam 1 2 3
注意:list(zip(*request))
的计算结果为
[('foo', 'spam'), ('foo', 'eggs'), ('foo', 'spam')]
关于python - 从多索引 DataFrame 中多次获取同一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59175328/