如何在for循环中使用lambda函数?

时间:2019-07-03 05:56:04

标签: python-3.x pandas

我正在尝试在一些复杂的计算上使用lambda函数。我在数据框中有一个列名“ time_periods_st”,想要创建一些新列,例如:dd1-dd10,z1-z10,z_s1-z_s10。从1到“ time_periods_st”,我们使用一种计算方法(dd1-dd(time_periods_st));对于“ time_periods_st”,到10,我们使用另一种计算方法(dd(time_periods_st)-dd10)。我们仅受两个不同的time_periods_st值限制(目前为1或5)。

我尝试通过lambda函数使用apply。我的代码正在运行,但数据框为空。

from scipy.stats import norm
import pandas as pd
import math
def delta_dd_cals(df,time_period=10):
    if df['time_periods_st'] == 1:
        for i in range(1,df['time_periods']+1):
                if df['RHO'] > 0:
                    df['dd'+str(i)] = norm.ppf(df['CAST'+str(i-1)]) - norm.ppf(df['CAST'+str(i)])
                    df['z'+str(i)] = df['dd'+str(i)]/math.sqrt(df['RHO'])
                    df['z_s'+str(i)] = (df[['dd'+str(j) for j in range(i+1)]].sum() + df['DD'])/math.sqrt(df['RHO'])
                elif df['RHO']<0 or df['CAST1']<0:
                    df['z'+str(i)] = np.nan
                    df['dd'+str(i)] = np.nan
                    df['z_s'+str(i)] = np.nan
                else:
                    df['z'+str(i)] = 0
                    df['dd'+str(i)] = 0
                    df['z_s'+str(i)] = 0           

        for k in range(df['time_periods_st']+1,time_period+1):
                if df['RHO'] > 0:
                    df['z'+str(k)] = (df['A1'] * (df['Z_NORM']-df['z_s'+str(k-1)])) + ((df['A2'] * df['z'+str(k-1)]))
                    df['dd'+str(k)] = math.sqrt(df['RHO']) * df['z'+str(k)]
                    df['z_s'+str(k)] = (df[['dd'+str(j) for j in range(k+1)]].sum() + df['DD'])/math.sqrt(df['RHO'])

                elif df['RHO']<0 or df['CAST1']<0:
                    df['z'+str(i)] = np.nan
                    df['dd'+str(i)] = np.nan
                    df['z_s'+str(i)] = np.nan
                else:
                    df['z'+str(i)] = 0
                    df['dd'+str(i)] = 0
                    df['z_s'+str(i)] = 0

    else:
        for i in range(1,df['time_periods']+1):
                if df['RHO'] > 0:
                    df['dd'+str(i)] = norm.ppf(df['CAST'+str(i-1)]) - norm.ppf(df['CAST'+str(i)])
                    df['z'+str(i)] = df['dd'+str(i)]/math.sqrt(df['RHO'])
                    df['z_s'+str(i)] = (df[['dd'+str(j) for j in range(i+1)]].sum() + df['DD'])/math.sqrt(df['RHO'])
                elif df['RHO']<0 or df['CAST1']<0:
                    df['z'+str(i)] = np.nan
                    df['dd'+str(i)] = np.nan
                    df['z_s'+str(i)] = np.nan
                else:
                    df['z'+str(i)] = 0
                    df['dd'+str(i)] = 0
                    df['z_s'+str(i)] = 0           

        for k in range(df['time_periods_st']+1,time_period+1):
                if df['RHO'] > 0:
                    df['z'+str(k)] = (df['A1'] * (df['Z_NORM']-df['z_s'+str(k-1)])) + ((df['A2'] * df['z'+str(k-1)]))
                    df['dd'+str(k)] = math.sqrt(df['RHO']) * df['z'+str(k)]
                    df['z_s'+str(k)] = (df[['dd'+str(j) for j in range(k+1)]].sum() + df['DD'])/math.sqrt(df['RHO'])

                elif df['RHO']<0 or df['CAST1']<0:
                    df['z'+str(i)] = np.nan
                    df['dd'+str(i)] = np.nan
                    df['z_s'+str(i)] = np.nan
                else:
                    df['z'+str(i)] = 0
                    df['dd'+str(i)] = 0
                    df['z_s'+str(i)] = 0

df_delta = df_delta.apply(lambda x: delta_dd_cals(x),axis=1)

我的代码正在运行,但数据帧为空。

0 个答案:

没有答案