如何在python中动态创建列本身的总和

如何在python中动态创建列本身的总和,python,dataframe,dynamic,sum,average,Python,Dataframe,Dynamic,Sum,Average,我的原始数据是: 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) 我想做的事情是:我有一个函数

我的原始数据是:

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)

我想计算w,它按照以下步骤进行

  • 得到f(k)的1周期正向值,然后计算
  • w的计算公式为
  • 结果是

    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 
    
    问题:有人能帮助我们在不使用循环的情况下快速生成代码(不是数学上的)吗


    非常感谢

    我不完全理解你的问题,对我来说,所有这些符号都有点混乱

    如果我得到了您想要的正确结果,那么对于每一行,您都希望有前面所有行的累积值。然后根据该累计值计算此行另一列的值

    在这种情况下,我更喜欢一些东西,首先计算一个累计列,然后使用它

    例如: 注意,您需要调用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]
    
    
    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 
    
    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]