2013-11-26 153 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