2013-11-26 193 views
0

我有一個熊貓數據幀(在Python 2.7)與2-級索引上的時間和評分,與中音及價值是數據列:減去大熊貓數據幀與

Out[235]: 
        Tenor Value 
Time  Rating 
2011-12-30 AAA  3M 0.343 
      AAA  6M 0.404 
      AAA  1Y 0.541 
      AAA  2Y 0.684 
      AAA  3Y 0.869 
      AAA  4Y 1.254 
      AAA  5Y 1.467 
      AAA  7Y 2.051 
      AAA  8Y 2.272 
      AAA  9Y 2.575 
      AAA  10Y 2.938 
      AAA  15Y 3.757 
      AAA  20Y 4.108 
      AAA  30Y 4.377 
      AA  3M 0.435 
      AA  6M 0.547 
      AA  1Y 0.620 
      AA  2Y 0.737 
      AA  3Y 0.925 
      AA  4Y 1.321 
      AA  5Y 1.545 
      AA  7Y 2.132 
      AA  8Y 2.420 
      AA  9Y 2.628 
      AA  10Y 3.108 
      AA  15Y 3.920 
      AA  20Y 4.219 
      AA  30Y 4.490 

我有另一個數據幀

In [237]: treasDF 
Out[237]: 
    2013-09-20 12:01:00 
1M     0.008 
3M     0.013 
6M     0.043 
1Y     0.104 
2Y     0.332 
3Y     0.688 
5Y     1.478 
7Y     2.109 
10Y    2.735 
30Y    3.762 

我需要從每個多指標級別減去treasDF, - 我怎麼能這樣做呢?我嘗試了所有類型的groupby,並失敗了,例如失敗。 ratesDF.groupby(level=1).sub(treasDF.iloc[:,0], level=1)

謝謝。

+0

15Y不treasDF –

+0

正是@AndyHayden。它應該產生'NaN'或'NA' – gt6989b

回答

2

我意識到這是一個有點遲到了,但過這個試圖解決同樣的問題,迷迷糊糊,以爲我會離開我的,以防有人解別人發現這一點。

df1 = pd.DataFrame([[1, 2], [1, 2]], index=[0,1], columns=['a', 'b']) 

mcols = pd.MultiIndex.from_product([['A', 'B'], ['a', 'b', 'c']]) 
df2 = pd.DataFrame([[1, 2, 3, 4, 5, 6], [1, 2, 3, 1, 2, 3]], index=[0,1], columns=mcols) 

其中給出

df1 
    a b 
0 1 2 
1 1 2 

df2 
    A  B  
    a b c a b c 
0 1 2 3 4 5 6 
1 1 2 3 1 2 3 

,然後用。減去()和指定的級別廣播跨越

df2.subtract(df1, level=1) 
    A   B  
    a b c a b c 
0 0 0 NaN 3 3 NaN 
1 0 0 NaN 0 0 NaN 
1

我覺得你不需要groupby,下面的代碼能解決你的問題嗎?

ratesDF.Value - treasDF[ratesDF.Tenor].values 
+0

'treasDF [ratesDF.Tenor]'產生'KeyError:'['3M''6M''1Y'...,'15Y''20Y'30Y']不在index' 什麼似乎做大小明智兼容的東西是'treasDF.ix [ratesDF.Tenor]' - 但它產生了一個我不明白的向量,我希望它只是重複同樣的事情幾次,但沒有發生。 – gt6989b