我正在尝试使用多指标列表从多索引数据框中选择单个行。
例如。我有以下数据框:
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
答案 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