Вычисление среднего истинного диапазона в кадре данных Pandas

Я пытаюсь добавить столбец "Средний истинный диапазон" к фрейму данных, который содержит исторические данные о запасах.

Код, который я использую до сих пор:

def add_atr_to_dataframe (dataframe):
    dataframe['ATR1'] = abs (dataframe['High'] - dataframe['Low'])
    dataframe['ATR2'] = abs (dataframe['High'] - dataframe['Close'].shift())
    dataframe['ATR3'] = abs (dataframe['Low'] - dataframe['Close'].shift())
    dataframe['TrueRange'] = max (dataframe['ATR1'], dataframe['ATR2'], dataframe['ATR3'])
    return dataframe

Последняя строка, содержащая функцию max, выдает ошибку:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Я несколько дней гуглял, пытаясь узнать, как устранить эту ошибку или сделать код лучше и т. Д., И не нашел ничего, что помогло бы мне в этом.

Любая помощь в следующем будет высоко ценится:

  1. Как устранить ошибку

  2. Как сделать код лучше - я не имею в виду, что я должен кодировать его таким образом, и могут быть более эффективные способы сделать это.

Спасибо заранее

2 ответа

TL; Dr Использование

dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)

объяснение

Вы не можете использовать встроенный max на объектах панд. Поскольку первый аргумент вы передаете max повторяется, эта подпись max вызывается:

max(повторяемый [ , ключ ])

Это неявно выполняет __nonzero__ (правдивость) проверьте первый аргумент, чтобы определить, является ли итерируемая пустым, откуда и происходит ваша ошибка. Объекты Numpy и Pandas не приводят к логическим расчетам.

Вы ищете что-то вроде этого:

dataframe['TrueRange'] = dataframe[['ATR1', 'ATR2', 'ATR3']].max(axis=1)

Это вычисляет максимум ATR* столбцы вдоль горизонтальной оси и возвращает результат в виде Series, который вы затем добавляете как новый TrueRange столбец в вашем фрейме данных.

Не совсем уверен, что я понял, что вы имеете в виду, но я бы предложил использовать pd.max() вместо max () в проблемной строке.

Другие вопросы по тегам