Есть ли аккуратный способ проверить наличие в интервале всех значений в массиве, используя панд (или другой инструмент python)?

1

pandas.Interval может использоваться, чтобы определить, аккуратно ли значение попадает в интервал, например:

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: iv = pd.Interval(0, 5.5)

In [4]: 4.37 in iv
Out[4]: True

Можно ли проверить включение для всех элементов массива вместо одного значения? Результат будет таким же, как в:

In [5]: arr = np.array(((1,8),(-4,3.5)))

In [6]: arr
Out[6]:
array([[ 1. ,  8. ],
       [-4. ,  3.5]])

In [7]: (arr > iv.left) & (arr <= iv.right)
Out[7]:
array([[ True, False],
       [False,  True]])

Но используя более простой синтаксис, который хорош в pd.Interval. Что-то вроде ниже, что не работает:

In [8]: arr in iv
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-a118a68ee023> in <module>()
----> 1 arr in iv

pandas/_libs/interval.pyx in pandas._libs.interval.Interval.__contains__()

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

  • 0
    Это не доступно в настоящее время из коробки в пандах, но может быть добавлено в какой-то момент в будущем (v0.25 возможно?). Не уверен, что 2d массивы будут поддерживаться, но 1d структуры должны, по крайней мере, поддерживаться.
Теги:
pandas
intervals

1 ответ

0

Проверьте с vectorize

def youf(x,iv):
    return x in iv

vfunc = np.vectorize(youf)

iv = pd.Interval(0, 5.5)

vfunc(arr, iv)
Out[27]: 
array([[ True, False],
       [False,  True]])

Ещё вопросы

Сообщество Overcoder
Наверх
Меню