多索引数据框中的多行选择

multiple row selection in multi indexed dataframe

假设我在 pandas 中编写此代码来创建数据框:

pd.DataFrame({'x':random.sample(range(1,100), 4),
         'y':random.sample(range(1,100), 4),
         'z':random.sample(range(1,100), 4)},
          index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])

这会产生以下数据框:

            x   y   z
    a1  a2  8   2   85
    b1  b2  43  93  58
    c1  c2  1   46  24
    d1  d2  60  37  62

我想 select 通过传递一个列表来 select 多索引行:

[[a1, a2], [b1, b2], [c1, c2]]

到return:

            x   y   z
    a1  a2  8   2   85
    b1  b2  43  93  58
    c1  c2  1   46  24

pandas 中是否有函数可以做到这一点?

您可以 select 使用索引 df.iloc

import pandas as pd
import random
df = pd.DataFrame({'x':random.sample(range(1,100), 4),
         'y':random.sample(range(1,100), 4),
         'z':random.sample(range(1,100), 4)},
          index = [['a1', 'b1', 'c1','d1'], ['a2', 'b2', 'c2', 'd2']])

df.iloc[0:3]

returns

        x   y   z
a1 a2  51  36  70
b1 b2  37  45  63
c1 c2  96  16  64

您非常接近:您需要将索引定义为元组列表而不是列表列表:

target_index = [('a1', 'a2'), ('b1', 'b2'), ('c1', 'c2')]

然后

df.loc[target_index]

给你想要的输出:

       x  y  z
a1 a2  0  2  3
b1 b2  1  3  4
c1 c2  2  4  5