2016-05-02 5 views
2

私はこのようなパンダのピボットテーブルを持っています。Pandas index.insertの使い方は?

これに
   Class1 Class2 
Boy Tall  5   3 
     Short 2   4 
Girl Tall  3   3 
     Short 3   4 

、私は次のように合計行を追加したい。(ピボットテーブルを使用せずに「余白」)

   Class1 Class2 
Boy Tall  5   3 
     Short 2   4 
Girl Tall  3   3 
     Short 3   4 
Total   13  14 

私はこれを行うための一つの方法は、ダミーのインデックス(学生を挿入だと思います)を現在の最初のインデックス(Boy & Girl)の前に追加し、groupby(level = 0)を実行して列の合計を計算し、元のデータフレームと新しいサブ行を連結する前にダミーインデックスを削除します。

      Class1 Class2 
Students Boy Tall  5   3 
       Short 2   4 
      Girl Tall  3   3 
       Short 3   4 
      Total   13  14 

私が書いたコードは、このようなものですが、index.insertステートメントで 'unhashable type'エラーが発生します。私が助けが必要なもう一つの方法は、ダミーインデックスを削除する方法です。私はdocの中にindex.removeのようなものは見当たりません。

df2 = df 
df2.index.insert(0,'Students') ## Apparently 'Students' results in 'unhashable type' error 
df2 = df2.groupby(level = 0, sort = False).sum() 
df2.index.remove(0)   ## This is what I made up...Couldn't find how to remove a particular index from multiindex 
pd.concat(df, df2) 

ドキュメントには次のような記述がありますが、許容できる「アイテム」の良い例は見つかりませんでした。

pandas.Index.insert 

Index.insert(loc, item) 
    Make new Index inserting new item at location. Follows Python list.append semantics for negative values 
+1

? –

+0

私の要件の一部は、行の合計を表示しないことです。 pivot_tableマージンを使用して、2つのうちの1つ(つまり、行または列の合計)のみを選択する方法はないようです。 –

+0

ピボットの前にデータフレームをポストして再作成できますか? –

答えて

2
df = pd.DataFrame({'gender': ['Boy', 'Boy', 'Girl', 'Girl'], 
        'height': ['Tall', 'Short'] * 2, 
        'Class1': [5, 2, 3, 3], 
        'Class2': [3, 4, 3, 4]}).set_index(['gender', 'height']) 

df.ix[('Total', ''), :] = df.sum() 

>>> df 
       Class1 Class2 
gender height     
Boy Tall  5.0  3.0 
     Short  2.0  4.0 
Girl Tall  3.0  3.0 
     Short  3.0  4.0 
Total   13.0 14.0 
3

あなたはmargins=Trueを使用して、ちょうど最後の1を除くすべてのcolumsをサブセット、このようなものができます:あなたは `マージン= true`をを使用したくないのはなぜ

pd.pivot_table(data, index = ['gender','height'], 
        columns = ['class'], margins=True).iloc[:,:-1] 
関連する問題