Подтвердить что ты не робот

Python Pandas: булевское индексирование на нескольких столбцах

несмотря на то, что есть два хорошие учебные пособия по как индексировать DataFrame в библиотеке Python pandas, я все еще не могу выработать элегантный способ SELECT для более чем одного столбца.

>>> d = pd.DataFrame({'x':[1, 2, 3, 4, 5], 'y':[4, 5, 6, 7, 8]})
>>> d
   x  y
0  1  4
1  2  5
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2] # This works fine
   x  y
2  3  6
3  4  7
4  5  8
>>> d[d['x']>2 & d['y']>7] # I had expected this to work, but it doesn't
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

Я нашел (что я думаю) довольно неэлегантный способ сделать это, как этот

>>> d[d['x']>2][d['y']>7]

Но это не очень, и он оценивается довольно низко для читаемости (я думаю).

Есть ли лучший, более Python-tastic способ?

4b9b3361

Ответ 1

Это проблема с приоритетом оператора.

Вы должны добавить дополнительные круглые скобки, чтобы сделать ваш тест нескольких условий работы:

d[(d['x']>2) & (d['y']>7)]

В этом разделе упомянутого вами учебника показан пример с несколькими булевыми условиями и скобки.

Ответ 2

Там может быть лучший способ, но

In [56]: d[d['x'] > 2] and d[d['y'] > 7]
Out[56]: 
   x  y
4  5  8

работы.