Как создать новый столбец на основе существующих столбцов в pandas?

#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