Средний истинный диапазон с функцией groupby () - PullRequest
0 голосов
/ 26 апреля 2020

Мне удалось вычислить новый столбец, используя одну точку данных в функции groupby. Теперь, когда я пытаюсь вычислить новый столбец, используя несколько точек данных, я застрял.

import datetime
import numpy as np
import pandas as pd

date = pd.Series(np.tile(np.arange(np.datetime64('2010-01-01'), np.datetime64('2010-01-21')),3))
ticker = pd.Series(np.tile(((np.repeat('aaa',20)),(np.repeat('bbb',20)),(np.repeat('ccc',20))),1).flatten())
high = pd.Series(np.random.randint(100,200,size=60))
low = pd.Series(np.random.randint(1,25,size=60))
close = pd.Series(np.random.randint(30,75,size=60))
df = pd.DataFrame({
    "Date":date,
    "Ticker":ticker,
    "High":high,
    "Low":low,
    "Close":close,
    })
df.set_index('Date',inplace=True)
df["volatility"] = df.groupby("Ticker")["Close"].transform(lambda col: (np.log(col/col.shift(1)).rolling(window=10).std()*np.sqrt(10)))
df["tr"] = df.groupby("Ticker").transform(df[[abs(df["High"] - df["Low"]), abs(df["High"] - df["Close"].shift()), abs(df["Low"] - df["Close"].shift())]].max(axis=1))
df["atr"] = df.groupby("Ticker")["tr"].transform(lambda col: col.ewm(alpha=1/14, adjust=False).mean())
df

Ошибка:

Мы (временно) допускаем некоторые отсутствующие ключи с .lo c, за исключением

KeyError: "None of [Index ([(107, 141, 155, 88, 140, 110, 165, 137, 114, 172, 103, 116, 131, 99, 157, 115, 96, 115, 120, 169, 154, 114, 105, 182, 151, 97, 122, 158, 127, 172, 161, 176, 171, 122, 184, 149, 117, 181, 166, 97, 162, 84, 165, 109, 163, 193, 134, 124, 126, 93, 175, 141, 115, 142, 193, 124, 142, 101, 86, 170), \ n (nan, 92,0, 121,0, 77,0, 73,0, 79,0, 127,0, 75,0, 83,0, 149,0, 35,0, 96,0, 66,0, 59,0, 107,0, 71,0, 30,0, 52,0, 82,0, 155,0, 121,0, 89,0, 55,0, 166,0, 134,0, 79,0, 99,0, 115,0, 64,0, 127,0, 128,0, 136,0, 123,0, 91,0, 146,0, 112,0, 55,0, 133,0, 124,0, 34,0, 134,0, 34,0, 98,0, 87,0, 145,0, 163,0, 69,0, 109,0, 67,0, 51,0, 136,0, 92,0, 77,0, 88,0, 154,0, 74,0, 90,0, 49,0, 60,0, 130,0), \ n (Nan, 49,0, 34,0, 11,0, 67,0, 31,0, 38,0, 62,0, 31,0, 23,0, 68,0, 20,0, 65,0, 40,0, 50,0, 44,0, 66,0, 63,0, 38,0, 14,0, 33,0, 25,0, 50,0, 16,0, 17,0, 18,0, 23,0, 43,0, 43,0, 63,0, 45,0, 33,0, 40,0, 48,0, 31,0, 38,0, 37,0, 62,0, 48,0, 42,0, 63,0, 28,0, 50,0, 67,0, 22,0, 18,0, 30,0, 65,0, 15,0, 59,0, 42,0, 39,0, 49,0, 38,0, 54,0, 39,0, 50,0, 52,0, 52,0, 26,0, 40,0)], \ n dtype = 'object')] находятся в [столбцах] "

Я уверен, что моя строка df["tr"] является источником ошибки. Я в недоумении заставить его работать.

...