From SO: http://stackoverflow.com/questions/24247255/idiomatic-multiindex-column-assignment-in-pandas/24247513#24247513 http://stackoverflow.com/questions/24258781/advanced-cross-section-with-multi-index-in-pandas

ix = pd.MultiIndex.from_tuples(list(enumerate(np.random.choice(['A', 'B'], 5))))
df = pd.DataFrame({'Val': np.random.randint(0, 30, 5)}, index=ix).unstack().fillna(0)
df
   Val    
     A   B
0   27   0
1    0   3
2    0   7
3    9   0
4    0  19

I think this could be make to work (its column creation)

df['Half'] = df['Val']/2

concat soln Automatic broadcasting (but need to not 'align')

    In [59]: concat([df['Val'],df['Val']/2],axis=1,keys=['Val','Half'])
    Out[59]: 
       Val      Half              
         A   B     A    B
    0    0  10   0.0  5.0
    1    0  10   0.0  5.0
    2    0  13   0.0  6.5
    3   27   0  13.5  0.0
    4    2   0   1.0  0.0
In [42]: In 
[107]: df = pd.DataFrame(np.arange(5*12).reshape(-1,12), columns=col)

In [108]: df
Out[108]: 
first    A                       B                    
second   a           b           a           b        
third    1   2   3   1   2   3   1   2   3   1   2   3
0        0   1   2   3   4   5   6   7   8   9  10  11
1       12  13  14  15  16  17  18  19  20  21  22  23
2       24  25  26  27  28  29  30  31  32  33  34  35
3       36  37  38  39  40  41  42  43  44  45  46  47
4       48  49  50  51  52  53  54  55  56  57  58  59

In [109]: df.loc[:,idx[:,:,[2,3]]]-np.tile(df.loc[:,idx[:,:,1]].values,2)
Out[109]: 
first   A           B         
second  a     b     a     b   
third   2  3  2  3  2  3  2  3
0       1 -1 -2 -4  7  5  4  2
1       1 -1 -2 -4  7  5  4  2
2       1 -1 -2 -4  7  5  4  2
3       1 -1 -2 -4  7  5  4  2
4       1 -1 -2 -4  7  5  4  2

Comment From: mroeschke

Looks like this raises a specific ValueError now so it looks intentional that this shouldn't be supported I suppose. Closing but happy to reopen if I misunderstood