华东理工大学《金融计算》实验课

序贯排序构建投资组合

蒋志强

In [1]:
import numpy as np
import pandas as pd
In [4]:
data = pd.read_csv('RESSET_MRESSTK_1.csv', encoding='GB2312', usecols=range(8))
for i in range(2, 10):
    data_read = pd.read_csv('RESSET_MRESSTK_' + str(i) + '.csv', encoding='GB2312', usecols=range(8))
    data = data.append(data_read, ignore_index=True)
    del data_read
data.columns = ['stk', 'date', 'close', 'fshare', 'tshare', 'monret', 'monrf', 'pe']
data
Out[4]:
stk date close fshare tshare monret monrf pe
0 1 2000-01-28 18.53 1.551847e+09 1.071634e+09 0.0619 0.001650 51.90
1 1 2000-02-29 18.32 1.551847e+09 1.071634e+09 -0.0113 0.001650 51.32
2 1 2000-03-31 18.37 1.551847e+09 1.071634e+09 0.0027 0.001650 51.46
3 1 2000-04-28 19.05 1.551847e+09 1.071634e+09 0.0370 0.001650 56.53
4 1 2000-05-31 18.00 1.551847e+09 1.071634e+09 -0.0551 0.001650 53.41
... ... ... ... ... ... ... ... ...
437756 603999 2019-08-30 5.62 5.760000e+08 5.760000e+08 0.0604 0.002218 61.96
437757 603999 2019-09-30 5.65 5.760000e+08 5.760000e+08 0.0053 0.002261 62.29
437758 603999 2019-10-31 5.86 5.760000e+08 5.760000e+08 0.0372 0.002304 54.56
437759 603999 2019-11-29 6.36 5.760000e+08 5.760000e+08 0.0853 0.002490 59.22
437760 603999 2019-12-31 7.34 5.760000e+08 5.760000e+08 0.1541 0.002524 68.34

437761 rows × 8 columns

In [5]:
data['date'] = pd.to_datetime(data['date'])
data['yearmonth'] = data['date'].dt.strftime('%Y%m').astype(int)
data['stksize'] = data['close']*data['fshare']
data['stkep'] = 1/data['pe']
data['monexcret'] = data['monret'] - data['monrf']
data.dropna(inplace = True, subset=['stksize', 'stkep'])
data
Out[5]:
stk date close fshare tshare monret monrf pe yearmonth stksize stkep monexcret
0 1 2000-01-28 18.53 1.551847e+09 1.071634e+09 0.0619 0.001650 51.90 200001 2.875573e+10 0.019268 0.060250
1 1 2000-02-29 18.32 1.551847e+09 1.071634e+09 -0.0113 0.001650 51.32 200002 2.842984e+10 0.019486 -0.012950
2 1 2000-03-31 18.37 1.551847e+09 1.071634e+09 0.0027 0.001650 51.46 200003 2.850743e+10 0.019433 0.001050
3 1 2000-04-28 19.05 1.551847e+09 1.071634e+09 0.0370 0.001650 56.53 200004 2.956269e+10 0.017690 0.035350
4 1 2000-05-31 18.00 1.551847e+09 1.071634e+09 -0.0551 0.001650 53.41 200005 2.793325e+10 0.018723 -0.056750
... ... ... ... ... ... ... ... ... ... ... ... ...
437756 603999 2019-08-30 5.62 5.760000e+08 5.760000e+08 0.0604 0.002218 61.96 201908 3.237120e+09 0.016139 0.058182
437757 603999 2019-09-30 5.65 5.760000e+08 5.760000e+08 0.0053 0.002261 62.29 201909 3.254400e+09 0.016054 0.003039
437758 603999 2019-10-31 5.86 5.760000e+08 5.760000e+08 0.0372 0.002304 54.56 201910 3.375360e+09 0.018328 0.034896
437759 603999 2019-11-29 6.36 5.760000e+08 5.760000e+08 0.0853 0.002490 59.22 201911 3.663360e+09 0.016886 0.082810
437760 603999 2019-12-31 7.34 5.760000e+08 5.760000e+08 0.1541 0.002524 68.34 201912 4.227840e+09 0.014633 0.151576

424013 rows × 12 columns

In [8]:
uym = np.unique(data['yearmonth'].values)
print(len(uym))
uym
240
Out[8]:
array([200001, 200002, 200003, 200004, 200005, 200006, 200007, 200008,
       200009, 200010, 200011, 200012, 200101, 200102, 200103, 200104,
       200105, 200106, 200107, 200108, 200109, 200110, 200111, 200112,
       200201, 200202, 200203, 200204, 200205, 200206, 200207, 200208,
       200209, 200210, 200211, 200212, 200301, 200302, 200303, 200304,
       200305, 200306, 200307, 200308, 200309, 200310, 200311, 200312,
       200401, 200402, 200403, 200404, 200405, 200406, 200407, 200408,
       200409, 200410, 200411, 200412, 200501, 200502, 200503, 200504,
       200505, 200506, 200507, 200508, 200509, 200510, 200511, 200512,
       200601, 200602, 200603, 200604, 200605, 200606, 200607, 200608,
       200609, 200610, 200611, 200612, 200701, 200702, 200703, 200704,
       200705, 200706, 200707, 200708, 200709, 200710, 200711, 200712,
       200801, 200802, 200803, 200804, 200805, 200806, 200807, 200808,
       200809, 200810, 200811, 200812, 200901, 200902, 200903, 200904,
       200905, 200906, 200907, 200908, 200909, 200910, 200911, 200912,
       201001, 201002, 201003, 201004, 201005, 201006, 201007, 201008,
       201009, 201010, 201011, 201012, 201101, 201102, 201103, 201104,
       201105, 201106, 201107, 201108, 201109, 201110, 201111, 201112,
       201201, 201202, 201203, 201204, 201205, 201206, 201207, 201208,
       201209, 201210, 201211, 201212, 201301, 201302, 201303, 201304,
       201305, 201306, 201307, 201308, 201309, 201310, 201311, 201312,
       201401, 201402, 201403, 201404, 201405, 201406, 201407, 201408,
       201409, 201410, 201411, 201412, 201501, 201502, 201503, 201504,
       201505, 201506, 201507, 201508, 201509, 201510, 201511, 201512,
       201601, 201602, 201603, 201604, 201605, 201606, 201607, 201608,
       201609, 201610, 201611, 201612, 201701, 201702, 201703, 201704,
       201705, 201706, 201707, 201708, 201709, 201710, 201711, 201712,
       201801, 201802, 201803, 201804, 201805, 201806, 201807, 201808,
       201809, 201810, 201811, 201812, 201901, 201902, 201903, 201904,
       201905, 201906, 201907, 201908, 201909, 201910, 201911, 201912])
In [42]:
class sort_portfolio:
    
    def __init__(self, data, months, gnum):
        self.data = data
        self.months = months
        self.gnum = gnum
    
    def data_months(self):
        dm = self.data.loc[self.data['yearmonth'] == self.months[0], ['stk', 'stksize', 'stkep']]
        dm.dropna(inplace = True)
        for i in range(1, len(self.months)):
            ind = self.data['yearmonth'] == self.months[i]
            dm = pd.merge(left = dm,
                         right = self.data.loc[ind, ['stk', 'monexcret']],
                         on='stk',
                         how='left',
                         sort=True)
        dm.columns = ['stk', 'size6', 'ep6', 'ret7', 'ret8', 'ret9', 'ret10', 'ret11', 
                      'ret12', 'retn1', 'retn2', 'retn3', 'retn4', 'retn5', 'retn6']
        return dm

    
    def sort_single_ind(self):
        L = np.sum(self.data['yearmonth'] == self.months[0])
        n = np.fix(L/self.gnum).astype(int)
        x = np.ones(L)
        i = 0
        while i < self.gnum:
            if i == self.gnum-1:
                x[i*n:] = x[i*n:]*i
            else:
                x[i*n:(i+1)*n] = x[i*n:(i+1)*n]*i
            i = i+1
        ssi = x.astype(int)
        return ssi
        
    def sort_double_ind(self):
        L = np.sum(self.data['yearmonth'] == self.months[0])
        l = np.fix(L/self.gnum).astype(int)
        n = np.fix(L/(self.gnum**2)).astype(int)
        x = np.ones(L)
        i = 0
        while i < self.gnum:
            j = 0
            while j < self.gnum:
                if j == self.gnum-1:
                    if i == self.gnum-1:
                        x[(i*l+j*n):] = x[(i*l+j*n):]*j
                    else:
                        x[(i*l+j*n):((i+1)*l)] = x[(i*l+j*n):((i+1)*l)]*j
                else:
                    x[(i*l+j*n):(i*l+(j+1)*n)] = x[(i*l+j*n):(i*l+(j+1)*n)]*j
                j=j+1
            i=i+1
        sdi = x.astype(int)
        return sdi
    
    def sequence_sort(self):
        dm = self.data_months()
        ssi = self.sort_single_ind()
        sdi = self.sort_double_ind()
        dm.sort_values(by=['size6'], ascending=True, inplace=True)
        dm['sinsort'] = ssi
        dm.sort_values(by=['sinsort', 'ep6'], ascending=[True, True], inplace=True)
        dm['dousort'] = sdi
        return dm
    
    
    def sequence_sort_mreturn(self):
        sp = self.sequence_sort()
        spmreturn = sp.loc[:, ['ret7', 'sinsort', 'dousort']].dropna().groupby(
                    by=['sinsort', 'dousort'])['ret7'].mean()
        lret = ['ret8', 'ret9', 'ret10', 'ret11', 'ret12', 'retn1', 'retn2', 'retn3', 'retn4', 'retn5', 'retn6']
        for i in lret:
            a = sp.loc[:, [i, 'sinsort', 'dousort']].dropna().groupby(
                by=['sinsort', 'dousort'])[i].mean()
            spmreturn = pd.concat([spmreturn, a], axis=1)
        spmreturn['mret'] = spmreturn.apply(lambda x: x.mean(), axis=1)
        return spmreturn
        
     
In [43]:
print(uym[5:5+13])
sp = sort_portfolio(data, uym[5:5+13], 5)
sp.data_months()    
[200006 200007 200008 200009 200010 200011 200012 200101 200102 200103
 200104 200105 200106]
/home/matlab/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:17: FutureWarning: Passing 'suffixes' which cause duplicate columns {'monexcret_x'} in the result is deprecated and will raise a MergeError in a future version.
Out[43]:
stk size6 ep6 ret7 ret8 ret9 ret10 ret11 ret12 retn1 retn2 retn3 retn4 retn5 retn6
0 1 2.813499e+10 0.018587 0.01935 -0.04275 -0.04615 0.03315 0.00775 -0.06425 0.03005 -0.06105 0.14955 -0.04415 0.04145 -0.05655
1 2 6.879519e+09 0.032031 0.02575 -0.04995 -0.05445 0.06545 0.05895 -0.00235 0.06555 -0.07935 0.09715 -0.03805 -0.02775 0.04135
2 3 1.609612e+09 -0.108108 0.08045 0.05045 -0.06385 0.08285 0.09295 -0.04865 -0.00835 -0.19095 0.12255 -0.08265 -0.23245 -0.01625
3 4 1.828172e+09 0.005067 0.26015 0.16905 0.00515 -0.15885 0.17025 0.03025 -0.15315 -0.10875 0.14155 0.00845 -0.00475 0.00665
4 5 5.371841e+09 0.013839 -0.03735 -0.00805 -0.15815 0.05755 0.05055 0.00015 0.11605 -0.09545 0.11205 NaN NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
915 600896 3.950168e+09 0.016287 -0.07075 -0.00075 -0.16195 0.05685 0.00905 0.04825 -0.01265 -0.06725 0.04785 -0.03555 0.07155 -0.00165
916 600897 3.645000e+09 0.014004 0.05765 -0.09395 -0.08335 0.06885 0.08455 0.02215 0.04765 -0.09505 0.07985 -0.04895 0.06885 0.02315
917 600898 9.760557e+08 -0.740741 0.26755 0.07175 NaN NaN NaN NaN 0.28805 -0.37725 0.00945 NaN NaN NaN
918 600899 3.008716e+09 0.013569 -0.08715 0.08865 -0.01405 -0.05555 0.04205 0.02995 -0.04285 -0.03845 0.00795 0.56235 -0.20295 -0.01625
919 601607 5.612554e+09 0.019429 -0.01675 -0.07685 -0.09955 -0.04665 0.08055 0.00225 0.02725 -0.06395 0.06635 -0.00165 -0.02995 -0.01945

920 rows × 15 columns

In [32]:
sp.sequence_sort()
/home/matlab/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:17: FutureWarning: Passing 'suffixes' which cause duplicate columns {'monexcret_x'} in the result is deprecated and will raise a MergeError in a future version.
Out[32]:
stk size6 ep6 ret7 ret8 ret9 ret10 ret11 ret12 retn1 retn2 retn3 retn4 retn5 retn6 sinsort dousort
860 600837 2.368391e+08 -1.612903 0.21325 0.13215 0.00435 0.15545 0.21485 0.11415 -0.13965 -0.44365 0.20365 0.10095 NaN NaN 0 0
917 600898 9.760557e+08 -0.740741 0.26755 0.07175 NaN NaN NaN NaN 0.28805 -0.37725 0.00945 NaN NaN NaN 0 0
137 556 1.400283e+09 -0.206186 0.19015 0.04305 -0.04305 0.08465 0.00795 -0.08175 -0.04295 -0.23855 0.07095 -0.05245 -0.07095 0.10265 0 0
14 15 5.130653e+08 -0.166113 0.15665 0.21245 -0.00725 0.15685 0.21495 0.13485 -0.15945 -0.37225 0.07835 0.15675 0.15285 NaN 0 0
659 600625 5.814446e+08 -0.162866 0.17875 0.19545 -0.09395 0.15085 0.05715 0.08165 0.03045 -0.21035 -0.19315 NaN NaN NaN 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
468 600068 5.980800e+09 0.048709 0.08685 -0.03035 -0.11925 0.01575 0.04105 -0.00045 0.07325 0.01245 0.02735 -0.07675 -0.01295 0.04735 4 4
195 629 7.244965e+09 0.049579 0.15795 -0.07655 -0.09885 0.09255 0.02025 -0.03105 0.11265 0.01815 0.06865 -0.08545 -0.02515 0.04515 4 4
314 800 9.960300e+09 0.054585 0.18625 -0.09505 -0.09395 -0.00675 0.09715 0.00145 0.08955 -0.02285 0.07935 -0.06595 -0.00025 -0.02875 4 4
254 709 1.034326e+10 0.055249 0.08345 -0.02455 -0.06585 0.00895 0.06885 -0.02605 0.03335 0.02005 0.05505 -0.06205 -0.01715 0.03945 4 4
448 600006 6.120000e+09 0.056243 0.17155 0.00115 -0.11415 -0.00635 0.18705 -0.00565 0.12455 0.05375 0.01735 0.03345 0.06725 0.05085 4 4

920 rows × 17 columns

In [44]:
sp.sequence_sort_mreturn()
/home/matlab/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:17: FutureWarning: Passing 'suffixes' which cause duplicate columns {'monexcret_x'} in the result is deprecated and will raise a MergeError in a future version.
Out[44]:
ret7 ret8 ret9 ret10 ret11 ret12 retn1 retn2 retn3 retn4 retn5 retn6 mret
sinsort dousort
0 0 0.173922 0.107881 0.030353 0.060070 0.048401 -0.034741 -0.017000 -0.175225 0.116478 0.043306 0.064793 0.045944 0.038682
1 0.111039 0.042821 0.003799 0.077228 0.066200 -0.018750 -0.046994 -0.088456 0.112203 0.046222 0.115211 -0.022586 0.033161
2 0.052022 0.056031 -0.019269 0.057953 0.078311 0.012172 -0.036836 -0.065128 0.087808 0.044842 0.093056 -0.003072 0.029824
3 0.028703 0.024397 -0.012497 0.049692 0.050439 0.029194 -0.031914 -0.072972 0.113317 0.018290 0.082219 -0.013841 0.022085
4 0.046168 0.008435 -0.009587 0.050182 0.076828 0.042158 -0.015373 -0.058518 0.090845 0.002165 0.091280 0.017025 0.028467
1 0 0.063858 0.056269 -0.050950 0.056687 0.063124 0.016793 -0.037836 -0.104803 0.132569 0.011724 0.100701 0.000453 0.025716
1 0.041611 0.014114 -0.012194 0.032910 0.076027 0.013736 -0.018678 -0.059683 0.080008 0.014997 0.081139 0.000600 0.022049
2 0.049258 0.001844 -0.027422 0.070122 0.053942 0.005214 0.002089 -0.069831 0.077628 0.006139 0.068942 0.025783 0.021976
3 0.054975 0.008581 -0.013614 0.045028 0.094844 0.016283 -0.000567 -0.055572 0.104931 -0.002844 0.067519 0.005322 0.027074
4 0.066050 -0.016965 -0.033098 0.065848 0.062397 0.015870 0.004270 -0.035415 0.085587 0.003575 0.097543 -0.001230 0.026203
2 0 0.057742 0.042617 -0.037903 0.050064 0.076611 -0.018497 -0.019614 -0.083525 0.099369 0.006139 0.062622 -0.003950 0.019306
1 0.014333 -0.010058 -0.041322 0.020497 0.040197 0.020739 -0.023200 -0.097872 0.076550 0.006814 0.042106 0.056844 0.008802
2 0.056300 0.002936 -0.064081 0.038628 0.063406 0.001269 0.002392 -0.053286 0.056639 0.019853 0.045672 0.016058 0.015482
3 0.021228 -0.010472 -0.043994 0.027931 0.062028 0.010069 -0.011833 -0.066153 0.087167 -0.013842 0.053353 0.019775 0.011271
4 0.082727 -0.021792 -0.063348 0.026665 0.064165 0.019290 0.018185 -0.038035 0.057118 -0.018145 0.034603 0.017068 0.014875
3 0 0.016956 -0.019764 -0.036093 0.021831 0.045503 -0.002228 -0.005361 -0.074056 0.070358 0.020567 0.057011 -0.027172 0.005629
1 0.036478 -0.002578 -0.034219 0.015856 0.053086 0.008631 -0.010447 -0.051083 0.077078 -0.002583 0.022444 -0.018972 0.007807
2 0.020203 0.011294 -0.039233 0.032125 0.048550 0.011708 -0.008208 -0.062942 0.067153 -0.028097 0.039258 0.009069 0.008407
3 0.051350 -0.015219 -0.056600 0.028619 0.066547 0.010719 0.001817 -0.056867 0.077853 -0.014053 0.016761 0.010750 0.010140
4 0.062085 -0.028233 -0.070782 0.027050 0.068445 0.013453 0.012778 -0.040185 0.066818 -0.031177 0.014087 0.016700 0.009253
4 0 0.028142 -0.003422 -0.046336 -0.003061 0.051483 -0.014019 -0.054681 -0.078636 0.042200 -0.008781 0.030781 -0.011658 -0.005666
1 0.016983 -0.023992 -0.066517 -0.000075 0.064961 -0.030997 -0.026714 -0.078544 0.069389 -0.001327 0.002239 -0.005936 -0.006711
2 0.041000 0.002325 -0.035553 0.001619 0.048522 -0.011456 -0.030150 -0.068319 0.065192 -0.020792 0.014528 -0.007692 -0.000065
3 0.027756 -0.020106 -0.067797 0.012744 0.041869 0.001794 -0.007414 -0.056100 0.067317 -0.038104 0.004961 0.006881 -0.002183
4 0.059242 -0.024403 -0.081827 0.013978 0.071618 0.000600 0.015015 -0.020338 0.061005 -0.031415 0.007520 0.009283 0.006690
In [45]:
meanret = []
lcname = []
for i in range(5, 234, 12):
    if len(uym[i:i+13]) == 13:
        lcname.append(str(uym[i]))
        sp = sort_portfolio(data, uym[i:i+13], 5)
        spmreturn = sp.sequence_sort_mreturn()
        if len(meanret) == 0:
            meanret = spmreturn['mret']
        else:
            meanret = pd.concat([meanret, spmreturn['mret']], axis=1)
meanret.columns = lcname
meanret
/home/matlab/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:17: FutureWarning: Passing 'suffixes' which cause duplicate columns {'monexcret_x'} in the result is deprecated and will raise a MergeError in a future version.
Out[45]:
200006 200106 200206 200306 200406 200506 200606 200706 200806 200906 201006 201106 201206 201306 201406 201506 201606 201706 201806
sinsort dousort
0 0 0.038682 -0.005377 -0.024413 -0.035574 -0.050378 0.047140 0.126461 0.016072 0.055135 0.011673 0.032716 -0.005958 0.012437 0.042117 0.116720 0.019304 0.005456 -0.037974 0.017007
1 0.033161 -0.023603 -0.025662 -0.022485 -0.038628 0.047678 0.107215 0.010052 0.052488 0.027131 0.035022 -0.015669 0.004628 0.037461 0.106410 0.018864 0.001073 -0.035794 0.013316
2 0.029824 -0.022175 -0.024993 -0.022466 -0.036893 0.039064 0.099709 0.004965 0.050275 0.017892 0.038306 -0.017326 0.003223 0.042669 0.107072 0.020667 -0.002355 -0.029720 0.009022
3 0.022085 -0.017776 -0.022063 -0.019937 -0.036897 0.033315 0.084425 0.013387 0.056171 0.024127 0.041007 -0.014898 0.001441 0.041191 0.114206 0.021875 0.004357 -0.028613 0.009609
4 0.028467 -0.019226 -0.024360 -0.014133 -0.030322 0.038342 0.078141 0.039795 0.082930 0.033111 0.034234 -0.009028 0.008400 0.036707 0.104172 0.054188 0.010400 -0.028065 0.011047
1 0 0.025716 -0.019017 -0.029728 -0.031086 -0.044553 0.045151 0.095170 -0.004208 0.049865 0.009414 0.031882 -0.029026 -0.002538 0.024283 0.087023 -0.005417 0.001681 -0.035598 0.008329
1 0.022049 -0.020558 -0.028603 -0.025905 -0.033245 0.043136 0.085578 -0.005073 0.040033 0.015151 0.024619 -0.023169 0.003446 0.025666 0.092440 0.007937 -0.013361 -0.029035 0.003121
2 0.021976 -0.023676 -0.026548 -0.016883 -0.038696 0.039611 0.070726 -0.008115 0.044065 0.019681 0.023501 -0.015293 0.002981 0.028481 0.091630 0.000421 -0.009925 -0.030294 0.007169
3 0.027074 -0.021176 -0.022270 -0.019754 -0.026772 0.034882 0.077731 -0.005292 0.046263 0.024720 0.024113 -0.018248 -0.003483 0.029755 0.085901 0.006876 -0.006112 -0.028947 0.004277
4 0.026203 -0.018704 -0.017574 -0.010794 -0.020504 0.047784 0.084115 0.000501 0.047937 0.013542 0.028363 -0.019084 -0.001540 0.026965 0.092296 -0.001243 0.007033 -0.025566 0.004333
2 0 0.019306 -0.022034 -0.033642 -0.022505 -0.042536 0.037039 0.076972 -0.020181 0.040663 0.007471 0.022658 -0.032158 -0.006065 0.012651 0.082807 -0.015003 -0.008659 -0.031933 0.001318
1 0.008802 -0.024747 -0.027950 -0.016537 -0.035253 0.031819 0.077054 -0.015766 0.038448 0.004174 0.017234 -0.022232 -0.003973 0.021329 0.089427 -0.006048 -0.018022 -0.028856 0.003211
2 0.015482 -0.022552 -0.024913 -0.017505 -0.030481 0.034622 0.068204 -0.004877 0.038947 0.021823 0.023063 -0.019279 0.002556 0.023551 0.080872 -0.009539 -0.006206 -0.028338 0.003857
3 0.011271 -0.022214 -0.023799 -0.015691 -0.025381 0.042323 0.070009 -0.009578 0.041036 0.021652 0.025357 -0.020303 -0.007519 0.023166 0.083353 -0.009586 -0.005085 -0.025447 -0.002021
4 0.014875 -0.018801 -0.016940 -0.007300 -0.017269 0.045837 0.076582 -0.002288 0.043236 0.018815 0.026551 -0.023915 -0.006023 0.013398 0.083113 -0.011110 0.003486 -0.020398 0.001986
3 0 0.005629 -0.020335 -0.025626 -0.021973 -0.029998 0.039979 0.083818 -0.019195 0.025172 0.001288 0.024731 -0.028191 -0.001918 0.014667 0.082696 -0.023825 -0.017377 -0.034779 0.000464
1 0.007807 -0.026038 -0.019046 -0.016388 -0.029749 0.043836 0.072510 -0.027005 0.019757 0.010557 0.016512 -0.024181 0.000019 0.019020 0.079384 -0.020625 -0.021878 -0.016775 -0.004475
2 0.008407 -0.021592 -0.026175 -0.014844 -0.024822 0.044335 0.074009 -0.013109 0.021640 0.005354 0.012652 -0.017984 -0.006134 0.016947 0.074352 -0.016270 -0.011777 -0.022924 -0.003656
3 0.010140 -0.019286 -0.019134 -0.009874 -0.020916 0.044331 0.074859 -0.014391 0.034825 0.018344 0.018339 -0.018699 -0.006777 0.012280 0.080214 -0.018150 -0.006490 -0.023489 0.002080
4 0.009253 -0.014207 -0.016382 -0.007245 -0.019954 0.030035 0.090957 -0.008379 0.035240 0.007685 0.024232 -0.022785 -0.004789 0.011392 0.085437 -0.015459 0.005538 -0.016099 -0.000295
4 0 -0.005666 -0.019738 -0.019139 -0.028790 -0.039132 0.030799 0.081013 -0.025830 0.021607 -0.004464 0.016555 -0.026177 -0.007946 0.006011 0.076978 -0.040301 -0.008660 -0.015889 0.000555
1 -0.006711 -0.022039 -0.021726 -0.018708 -0.027925 0.038966 0.074267 -0.019636 0.016373 -0.009452 0.017331 -0.018203 -0.002594 0.007958 0.057072 -0.030718 -0.008654 -0.018261 0.005958
2 -0.000065 -0.012921 -0.014361 -0.011565 -0.020516 0.033696 0.089149 -0.022177 0.023608 -0.004918 0.011795 -0.023961 -0.012107 0.005434 0.065182 -0.025945 0.001524 -0.015949 -0.006451
3 -0.002183 -0.014030 -0.011614 -0.000005 -0.010415 0.033168 0.092024 -0.013409 0.025349 -0.003864 0.022374 -0.024949 -0.017645 0.001732 0.074267 -0.024242 0.013058 -0.015758 0.005395
4 0.006690 -0.011178 -0.006434 0.003437 -0.013723 0.025247 0.093805 -0.007887 0.029649 -0.008240 0.019236 -0.020049 -0.011874 -0.001536 0.079231 -0.024651 0.013922 -0.006078 0.004512
In [47]:
meanret['meanreturn'] = meanret.apply(lambda x: x.mean(), axis=1)
a = meanret['meanreturn'].values.reshape((5,5))
a
Out[47]:
array([[ 0.02006561,  0.01750831,  0.01614524,  0.01721118,  0.02288413],
       [ 0.00933385,  0.00969608,  0.00951656,  0.01102833,  0.013898  ],
       [ 0.00348249,  0.00484817,  0.00785716,  0.00797597,  0.01072822],
       [ 0.00290672,  0.00332861,  0.00412666,  0.00727395,  0.00916713],
       [-0.00043231,  0.00069984,  0.00312907,  0.00680285,  0.00863578]])
In [48]:
print('{:>10s} {:>10s}, {:>10s}, {:>10s}, {:>10s}, {:>10s}'.format('', 'EP1', 'EP2', 'EP3', 'EP4', 'EP5'))
for i in range(5):
    print('{:>10s} {:10.5f}, {:10.5f}, {:10.5f}, {:10.5f}, {:10.5f}'.format('SIZE'+str(i+1), 
                                                                            a[i, 0], 
                                                                            a[i, 1], 
                                                                            a[i, 2], 
                                                                            a[i, 3], 
                                                                            a[i, 4]))
                  EP1,        EP2,        EP3,        EP4,        EP5
     SIZE1    0.02007,    0.01751,    0.01615,    0.01721,    0.02288
     SIZE2    0.00933,    0.00970,    0.00952,    0.01103,    0.01390
     SIZE3    0.00348,    0.00485,    0.00786,    0.00798,    0.01073
     SIZE4    0.00291,    0.00333,    0.00413,    0.00727,    0.00917
     SIZE5   -0.00043,    0.00070,    0.00313,    0.00680,    0.00864