2016-05-31 111 views
1

我有一個DF這樣的DF的乘法2子集具有:基於其他2只蟒熊貓

df 
Out[177]: 
       IV maturity strike 
date        
2000-12-29 0.435  0.083 0.600 
2000-12-29 0.390  0.083 0.700 
2000-12-29 0.331  0.083 0.800 
2000-12-29 0.283  0.083 0.900 
2000-12-29 0.391  0.250 0.600 
2000-12-29 0.349  0.250 0.700 
2000-12-29 0.304  0.250 0.800 
2000-12-29 0.268  0.250 0.900 

我想創建4個新的行,其中成熟= 0和IV是等於的產物IV成熟度== 0.083 IV和成熟度== 0.25 IV和'打擊'匹配在一起,例如:罷工0.6和到期期間0.083是0.435,到期日IV到期0.25罷工0.6美元0.391,所以0.391 * 0.435

Out[177]: 
        IV maturity strike 
    date        
    2000-12-29 0.435  0.083 0.600 
    2000-12-29 0.390  0.083 0.700 
    2000-12-29 0.331  0.083 0.800 
    2000-12-29 0.283  0.083 0.900 
    2000-12-29 0.391  0.250 0.600 
    2000-12-29 0.349  0.250 0.700 
    2000-12-29 0.304  0.250 0.800 
    2000-12-29 0.268  0.250 0.900 
    2000-12-29 0.170  0.000 0.600 
    2000-12-29 0.136  0.000 0.700 
    2000-12-29 0.101  0.000 0.800 
    2000-12-29 0.758  0.000 0.900 

感謝您的幫助!

回答

1

您可以使用pivot,然後使用由iloc選擇的多個第一列和第二列到新列0。最後unstackreset_index

df1 = (df.pivot(index='strike', columns='maturity', values='IV')) 

df1.loc[:,0] = df1.iloc[:,0] * df1.iloc[:,1] 

print (df1.unstack().reset_index(name='IV')) 
    maturity strike  IV 
0  0.083  0.6 0.435000 
1  0.083  0.7 0.390000 
2  0.083  0.8 0.331000 
3  0.083  0.9 0.283000 
4  0.250  0.6 0.391000 
5  0.250  0.7 0.349000 
6  0.250  0.8 0.304000 
7  0.250  0.9 0.268000 
8  0.000  0.6 0.170085 
9  0.000  0.7 0.136110 
10  0.000  0.8 0.100624 
11  0.000  0.9 0.075844 
+0

非常有用謝謝! –