2016-09-19 21 views
1

これはとても簡単なので、私は私の髪を引っ張っているとは思えません。 私はこのマルチインデックスの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を作成する基本テーブルに多くのコードや準備を書く必要がなく、MultiIndexesをpandas pivot_tableで扱う簡単な方法はありますか?

+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)'

はその後、元dfslicersと最後concataを使用します。

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

関連する問題