#python #pandas #standard-deviation
#питон #панды #стандартное отклонение #python #pandas
Вопрос:
У меня есть фрейм данных, как показано ниже
Я хочу получить стандартное отклонение доходности акций st.dev (T1/T0-1,T2/T1-1..etc)
например, st.dev((9.5/36.5)-1,(6.125/9.5)-1...etc)
Результат будет добавлен к фрейму данных номер 2.
Можете ли вы, пожалуйста, предложить лучший способ сделать это? Очевидно, что мне нужно сделать это с каждой акцией. Не могли бы вы, пожалуйста, помочь?
Заранее спасибо!
P.S: вы можете проигнорировать часть со стандартным отклонением, если вы просто поможете мне с возвратами, я сделаю все остальное.
Комментарии:
1. Чтобы было ясно, результат в идеале должен быть добавлен в столбец Return. Еще раз спасибо, ребята!
2. например, возврат TSL будет равен 44,75 — 44?
Ответ №1:
Вы можете получить T1/T0-1
значения с помощью df.pct_change. Оттуда вы можете использовать .agg
для агрегирования с несколькими функциями.
# sample df
# please always provide a sample that can be easily pasted and tested
# you could get it with `df.head(10).to_dict('split')`
df = pd.DataFrame({
'AAPL': [36.5, 9.5, 6.125, 40.25, 43.875, 40, 42.25],
'TSL': [44, 43.625, 47.875, 64.25, 17.375, 14.124, 44.75],
'GDXJ': [43.875, 13.625, 22.5, 37.125, 5.5, 21.125, 21.25],
'DAL': [11.625, 33.25, 4.625, 36, 36.25, 14.875, 31.75]
})
df2 = df.pct_change().agg(['mean', 'std']).T
Вывод
mean std
AAPL 0.755739 2.379347
TSL 0.280437 0.992349
GDXJ 0.434482 1.340593
DAL 1.389140 2.838230
Комментарии:
1. Большое вам спасибо! Это работает лучше, чем я ожидал. Мне приходилось создавать циклы, но я чувствовал, что это неэффективно. Я рад, что задал вопрос здесь. В следующий раз я предоставлю лучший пример. Таким образом, в принципе, .pct_change получит возврат в правильном порядке (т. Е. T1 / T0, а не наоборот). Очень круто. Еще раз спасибо Ричиев
Ответ №2:
Я полагаю, это все, что требуется:
df.std(axis = 0, skipna = True)
Ответ №3:
попробуйте это:
a=[(df.iloc[i 1]/df.iloc[i])-1 for i in range(df.shape[0]-1)]
df1=pd.DataFrame(pd.DataFrame(a).std(),columns=["Return"])
Комментарии:
1. Пожалуйста, не публикуйте только код в качестве ответа, но также предоставьте объяснение, что делает ваш код и как он решает проблему вопроса. Ответы с объяснением обычно более полезны и более высокого качества и с большей вероятностью привлекут голоса.