从multiindex pandas dataframe中选择单个行

时间:2018-06-16 18:59:05

标签: python pandas dataframe indexing multi-index

我正在尝试使用多指标列表从多索引数据框中选择单个行。

例如。我有以下数据框:

fork()

我想选择所有' C' (A,B)= [(1,1),(2,2)]

           Col1
A B C
1 1 1 -0.148593
    2  2.043589
  2 3 -1.696572
    4 -0.249049
2 1 5  2.012294
    6 -1.756410
  2 7  0.476035
    8 -0.531612

我有缺陷的代码如下:

           Col1
A B C
1 1 1 -0.148593
    2  2.043589
2 2 7  0.476035
    8 -0.531612

2 个答案:

答案 0 :(得分:0)

一种选择是使用pd.DataFrame.query

res = df.query('((A == 1) & (B == 1)) | ((A == 2) & (B == 2))')

print(res)

           Col1
A B C          
1 1 1  0.981483
    2  0.851543
2 2 7 -0.522760
    8 -0.332099

对于更通用的解决方案,您可以使用f-strings(Python 3.6+),它应该比str.format或手动连接更好。

filters = [(1,1), (2,2)]
filterstr = '|'.join(f'(A=={i})&(B=={j})' for i, j in filters)
res = df.query(filterstr)

print(filterstr)

(A==1)&(B==1)|(A==2)&(B==2)

答案 1 :(得分:0)

以下内容可能有所帮助:

idx_lst = [(1,1), (2,2)]

df.loc(0)[[ z for z in df.index if (z[0], z[1]) in idx_lst ]]
# Out[941]: 
#            Col1
# A B C          
# 1 1 1  0.293952
#     2  0.197045
# 2 2 7  2.007493
#     8  0.937420