#python #pandas #dataframe
Вопрос:
Я новичок в Python/пандах. Я хочу рассчитать непрерывную доходность на основе цены «GOOG». Если цена указана в столбце (a); Как я должен рассчитать доходность в столбце (b) в соответствии со следующей формулой?
непрерывные возвраты =
Я хочу сделать это, как показано на рисунке ниже (вычисление непрерывной доходности в Excel) в фрейме данных Pandas.
import pandas as pd
x = pd.DataFrame([2340, 2304, 2238, 2260, 2315, 2318, 2300, 2310, 2353, 2350],
columns=['a'])
Ответ №1:
Попробуй:
x['b'] = np.log(x['a']/x['a'].shift())
Выход:
a b
0 2340 NaN
1 2304 -0.015504
2 2238 -0.029064
3 2260 0.009782
4 2315 0.024045
5 2318 0.001295
6 2300 -0.007796
7 2310 0.004338
8 2353 0.018444
9 2350 -0.001276
Ответ №2:
Вы можете использовать функцию генератора с .apply
:
import numpy as np
import pandas as pd
x = pd.DataFrame(
[2340, 2304, 2238, 2260, 2315, 2318, 2300, 2310, 2353, 2350], columns=["a"]
)
def fn():
old_a = np.nan
a = yield
while True:
new_a = yield np.log(a / old_a)
a, old_a = new_a, a
s = fn()
next(s)
x["b"] = x["a"].apply(lambda v: s.send(v))
print(x)
С принтами:
a b
0 2340 NaN
1 2304 -0.015504
2 2238 -0.029064
3 2260 0.009782
4 2315 0.024045
5 2318 0.001295
6 2300 -0.007796
7 2310 0.004338
8 2353 0.018444
9 2350 -0.001276