0

下面是我的数据框:Df1

origin        2001-01-01 00:00:00  2002-01-01 00:00:00  2003-01-01 00:00:00  ...  2009-01-01 00:00:00  2010-01-01 00:00:00   Grand Total
Simulation 1         2.281294e+13                  NaN         1.459444e+20  ...         1.618202e+59         6.811895e+64  1.748673e+72
Simulation 2         2.175246e+13                  NaN         1.711078e+20  ...         1.388109e+59         5.608744e+64  2.106283e+72
Simulation 3         2.280800e+13                  NaN         1.422197e+20  ...         9.737150e+58         2.589176e+64  9.651312e+71
Simulation 4         2.426074e+13                  NaN         1.369407e+20  ...         1.063072e+59         2.921763e+64  1.961873e+71

第二个数据框:df2

 CI           Var 
0  60.0  3.009765e+72 
1  70.0  3.511393e+72 
2  80.0  4.013020e+72 
3  90.5  4.539729e+72 

下面是我的代码:

class cl_test():
    @classmethod
    def resamledtriangle(self,n_sims):
        # Load triangle
        triangle = cl.load_sample('genins')
        # Use bootstrap sampler to get resampled triangles
        bootstrapdataframe = cl.BootstrapODPSample(n_sims = n_sims, random_state=42).fit(triangle).resampled_triangles_

        #converting to dataframe
        resampledtriangledf1 = bootstrapdataframe.to_frame()
        #print(resampledtriangledf1)
        Reserve_val = []
        iter_count=0
    
        while (iter_count < n_sims):
            bg = resampledtriangledf1[resampledtriangledf1.index==iter_count]
            resampledtriangledf = bg.pivot_table(index="origin", columns="development", values="values")
            #print(resamp)
            #final = resampledtriangledf[::-1].bfill().iloc[0]
            final2 = resampledtriangledf.ffill(axis=1).iloc[:, -1]
            resampledtriangledf = resampledtriangledf.assign(Total = final2.values)
            #resampledtriangledf = resampledtriangledf.append(pd.Series(totTriangleDf1.sum(), name='Total')).append(pd.Series(final, name='Latest Observation'))
            #calculating grand total of each row and column
            #resampledtriangledf['Grand Total'] = resampledtriangledf.sum(axis=1)
            #resampledtriangledf.loc["Grand Total"] = resampledtriangledf.sum() 
            resampledtriangledf = resampledtriangledf.append(pd.Series(resampledtriangledf.sum(), name='Grand Total'))  
            resampledtriangcdfwa1 = resampledtriangledf.shift(-1, axis=1).loc['Grand Total'] / (resampledtriangledf.loc['Grand Total'])
            resampledtriangledf = resampledtriangledf.append(pd.Series(resampledtriangcdfwa1,name='Weighted Average'))
            c = resampledtriangledf.iloc[1][::-1].replace(np.inf, np.nan).dropna().cumprod()
            resampledtriangledf = resampledtriangledf.append(c.rename('CDF'))

            s = resampledtriangledf.iloc[:, :][:-2].copy()
            ultiCalc = pd.DataFrame()
            ultiCalc['Latest']= s['Total']
            ultiCalc['CDF'] = np.flip(resampledtriangledf.loc['CDF'].values) 
            ultiCalc['Ultimate'] = ultiCalc['Latest']*ultiCalc['CDF'] 
            ultiCalc['Unpaid'] = ultiCalc['Ultimate']-ultiCalc['Latest']
            ultiCalc = ultiCalc.append(pd.Series(ultiCalc.sum(), name='Total'))
            #ultiCalc = ultiCalc.iloc[: , :-1]
            iter_count+=1
            Reserve_val.append(ultiCalc['Unpaid'])  


        simulationDf = pd.DataFrame([x for x in Reserve_val]).reset_index(drop=True)
        simulationDf.index = 'Simulation ' + (simulationDf.index + 1).astype(str)
        simulationDf = simulationDf.iloc[: , :-1]
        return simulationDf

    def varmethod(self,CI,simulationDf):
        total = simulationDf['Grand Total'].sum() 
        df = pd.DataFrame(CI,columns=['CI'])
        for value,data in enumerate(CI): #== The enumerate() method adds counter to an iterable and returns it (the enumerate object).
            CI[value]=(data/100)*(total)
        df['Var'] = CI
        print(df)
        return df

在这里,我必须从 df2 迭代 var 值并与 df 数据框的总计列进行比较。并创建新的数据框并存储所有大于 Var 值的总计值。例如:Var 列的第一个值为 3.009765e+72。我必须从 df1 create dataframe 的总计中过滤所有更大的值。接下来我们必须过滤 Var(3.511393e+72) 的第二个值并创建数据帧。很快

4

0 回答 0