2017-01-08 5 views
0

Я пытаюсь вычислить ошибку отслеживания для ряда различных критериев по сравнению с фондом, на который я смотрю (ошибка отслеживания определяется как стандартное отклонение процентной разницы между фондом и тест). Временные ряды для фонда и всех эталонных тестов находятся в кадре данных, который я читаю из файла excel, и того, что у меня есть до сих пор (с идеей, что arg1 представляет все эталонные тесты и затем применяется с использованием applymap), но он возвращает KeyError, любые предложения?Ошибка отслеживания ряда тестов

import pandas as pd 
import numpy as np 
data = pd.read_excel('File_Path.xlsx') 

def index_analytics(arg1): 
    tracking_err = np.std((data['Fund'] - data[arg1])/data[arg1]) 
    return tracking_err 

data.applymap(index_analytics) 

ответ

1

Есть несколько вещей, которые необходимо исправлять. Сначала applymap передает каждое индивидуальное значение для всех столбцов вашей вызывающей функции (index_analytics). Таким образом, arg1 - это индивидуальное скалярное значение для всех значений в вашем фреймворке данных. data[arg1] всегда будет возвращать ключевую ошибку, если все ваши значения также не являются именами столбцов.

Вам также не нужно использовать приложение для этого. Предполагая, что ваши контрольные показатели находятся в одном и том же фрейме данных, вы должны иметь возможность сделать что-то подобное для каждого теста. В следующий раз включите образец вашего фрейма.

df['Benchmark1_result'] = (df['Fund'] - data['Benchmark1'])/data['Benchmark1'] 

И если вы хотите, чтобы вычислить все стандартные отклонения для всех тестов вы можете сделать это

# assume you have a dataframe with a list of all the benchmark columns 
benchmark_columns = [list, of, benchmark, columns] 

np.std((df['Fund'].values - df[benchmark_columns].values)/df['Fund'].values, axis=1) 
+0

Спасибо! Я вижу вашу мысль о создании списка. Итак, теперь я создал benchmark_columns = data.columns.tolist(), но когда я использую структуру, ((данные ['Fund']) - data [benchmark_columns])/data [benchmark_columns]). Std() , я получаю ошибку: –

+0

RuntimeWarning: unorderable types: str()

+0

'benchmark_columns' должно быть подмножеством ваших столбцов. Из вашего вышеуказанного кода вы захватываете все столбцы, которые были бы бессмысленными. Выберите только контрольные столбцы. Также используйте '.values' при выполнении вычитания. –