2016-09-19 72 views
1

這看起來很簡單,我簡直不敢相信我在拉我的頭髮。 我有這樣使用multiindex在pandas pivot_table上創建一個新列

 
Name  income   expenses 
     2015 2016  2015 2016 
Joe Doe  2  4   5  7 
Jane Doe 2  4   5  7 
Doe Joe  2  4   5  7 
Doe Jane 2  4   5  7 

一個pivot_table我只是想添加一個計算列profit_loss =(收入 - 支出) 我認爲這將是這樣的:

df['profit_loss'] = df['income'] - df['expenses] 

我只得到錯誤。

無需爲創建此pivot_table的基表編寫大量代碼或準備,是否有更簡單的方法來處理pandas pivot_table上的MultiIndexes

+0

可你[文章](http://stackoverflow.com/posts/39581185/edit)'df.to_dict()'的輸出,所以我們可以更容易地構建多索引DF? – MaxU

回答

0

可以使用第一sort_index,因爲錯誤:

KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (0)'

然後使用slicers和最後concata原始df

df.sort_index(axis=1, inplace=True) 

idx = pd.IndexSlice 
a = df.loc[:,idx['income',:]] - df.loc[:,idx['expenses',:]].values 
#rename column name 
a = a.rename(columns={'income':'profit_loss'}) 
print (a) 
     profit_loss  
       2015 2016 
Joe Doe   -3 -3 
Jane Doe   -3 -3 
Doe Joe   -3 -3 
Doe Jane   -3 -3 

df1 = pd.concat([df,a], axis=1) 
print (df1) 
     expenses  income  profit_loss  
      2015 2016 2015 2016  2015 2016 
Joe Doe   5 7  2 4   -3 -3 
Jane Doe  5 7  2 4   -3 -3 
Doe Joe   5 7  2 4   -3 -3 
Doe Jane  5 7  2 4   -3 -3 
+0

如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael

相關問題