Как я могу динамически создать сумму самого столбца в python - PullRequest
2 голосов
/ 25 апреля 2020

Мои необработанные данные:

def f_ST(ST,F,T):
    a=ST/F-1-np.log(ST/F)
    return 2*a/T

df=pd.DataFrame(range(50,140,5),columns=['K'])
df['f(K0)']=df.apply(lambda x: f_ST(x.K,100,0.25),axis=1)
df['f(K1)']=df['f(K0)'].shift(-1)
df['dK']=df['K'].diff(1)

Я хочу сделать следующее: у меня есть функция f (k)

f(k)= (k-100)/100 - ln(k/100)

Я хочу вычислить w, что следуя шагам

  1. , получите значение f-k для 1-периодного foward, затем вычислите
tmp(k)=f1_f(k)-f(k)/dk
w вычисляется как
w[0]=tmpw[0]

w[n]-tmpw[n]-(w[0]+w[1]+...w[n-1])

И результат выглядит как

nbr date        k   f(k)        f1_f(k)     d_k   tmpw       w
10  2019-02-19  100 0.000000    0.009679    5.0   0.001936   0.001936
11  2019-02-19  105 0.009679    0.037519    5.0   0.005568   0.003632
12  2019-02-19  110 0.037519    0.081904    5.0   0.008877   0.003309
13  2019-02-19  115 0.081904    0.141428    5.0   ...    
14  2019-02-19  120 0.141428    0.214852    5.0   ...
15  2019-02-19  125 0.214852    0.301086    5.0 
16  2019-02-19  130 0.301086    0.399163    5.0 

Вопрос: может ли кто-нибудь помочь получить быстрый код (не математически) без использования l oop?

Большое спасибо!

1 Ответ

0 голосов
/ 25 апреля 2020

Я не до конца понимаю ваш вопрос, для меня все эти обозначения были немного запутанными.

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

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

например: заметьте, вам нужно вызывать list (range ()) вместо list, так что ваш пример выдаёт ошибку

import pandas as pd
import numpy as np
def f_ST(ST,F,T):
    a=ST/F-1-np.log(ST/F)
    return 2*a/T

df=pd.DataFrame(list(range(50,140,5)),columns=['K'])
df['f(K0)']=df.apply(lambda x: f_ST(x.K,100,0.25),axis=1)
df['f(K1)']=df['f(K0)'].shift(-1)
df['dK']=df['K'].diff(1)
df['accumulate'] = df['K'].shift(1).cumsum() 
df['currentVal-accumulated'] = df['K'] - df['accumulate'] 
print(df)

печатает:

      K     f(K0)           ...            accumulate  currentVal-accumulated
0    50  1.545177           ...                   NaN                     NaN
1    55  1.182696           ...                  50.0                     5.0
2    60  0.886605           ...                 105.0                   -45.0
3    65  0.646263           ...                 165.0                  -100.0
4    70  0.453400           ...                 230.0                  -160.0
5    75  0.301457           ...                 300.0                  -225.0
6    80  0.185148           ...                 375.0                  -295.0
7    85  0.100151           ...                 455.0                  -370.0
8    90  0.042884           ...                 540.0                  -450.0
9    95  0.010346           ...                 630.0                  -535.0
10  100  0.000000           ...                 725.0                  -625.0
11  105  0.009679           ...                 825.0                  -720.0
12  110  0.037519           ...                 930.0                  -820.0
13  115  0.081904           ...                1040.0                  -925.0
14  120  0.141428           ...                1155.0                 -1035.0
15  125  0.214852           ...                1275.0                 -1150.0
16  130  0.301086           ...                1400.0                 -1270.0
17  135  0.399163           ...                1530.0                 -1395.0

[18 rows x 6 columns]

...