这里我有一个数据框

import pandas as pd
import numpy as np
data = pd.DataFrame(np.arange(100).reshape(20,5), columns=list('abcde'))
data = data.set_index(['a', 'b'])
print(data.head())
        c   d   e
a  b
0  1    2   3   4
5  6    7   8   9
10 11  12  13  14
15 16  17  18  19
20 21  22  23  24


如何通过逻辑判断器使用loc函数选择数据?
像这样:a 1

最佳答案

您可以将Index.get_level_valuesboolean indexing结合使用:

mask = (data.index.get_level_values('a') < 20) & (data.index.get_level_values('b') > 1)
print (mask)
[False  True  True  True False False False False False False False False
 False False False False False False False False]

print (data[mask])
        c   d   e
a  b
5  6    7   8   9
10 11  12  13  14
15 16  17  18  19


DataFrame.query的解决方案与另一个答案类似,只是将&更改为and

print (data.query("a < 20 and b > 1"))
        c   d   e
a  b
5  6    7   8   9
10 11  12  13  14
15 16  17  18  19


Query python versus pandas syntax comparison

10-07 16:18
查看更多