python - 从多索引 DataFrame 中多次获取同一行

标签 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)

如果我需要常规 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/

相关文章:

python - 如何使用分隔符拆分 pandas 中的列并在此过程中分配自定义唯一名称?

python - python 中 2 y 轴的图例问题

python - 如何将一列时间戳转换为日期时间?

Python - 读取msgpack文件并将其存储到数据框中

r - r 中的翻译(重新编码)错误

python - 是否应该在每个响应中设置 cookie header ?

python - 使用python进行图像颜色检测

python - 来自一个源代码树的多个分布

python - 转换为 csv 时仅从 xls 第一行删除\n 个字符 Python pandas

r - 为每个患者寻找最接近的匹配时间