2016-04-26 16 views
2

私はパンダに問題があります。私は、 'id1'、 'id2'、 'amount'という3つの列を持つデータフレームを持っています。別のデータフレームから1つのデータフレームを作成する(ピボットを使用)

これから、indexが 'id1'で、列が 'id2'で、セルに対応する 'amount'が含まれる別のデータフレームを作成したいと思います。

のは、例えば行こう:

import pandas as pd 
df = pd.DataFrame([['first_person','first_item',10],['first_person','second_item',6],['second_person','first_item',18],['second_person','second_item',36]],columns = ['id1','id2','amount']) 

得た:

 id1    id2    amount 
0 first_person  first_item  10 
1 first_person  second_item  6 
2 second_person first_item  18 
3 second_person second_item  36 

そしてここから、私は第二のデータフレームを作成したいと思います。もちろん

    first_item second_item 
first_person  10   6 
second_person 18   36 

を投稿する前に、私は一度それに取り組んだが、これのためにやったことは二重の 'for loop'だ。Whic私のデータフレームのサイズのhは計算可能ではありません。これをもっともっとpythonicなやり方でやる方法を知っていますか? (これは明らかに、はるかに効率的なループ「の」よりだろう!)

答えて

4

私はあなたが(pandas0.18.0に新)rename_axispivotを使用することができると思う:

print df 
      id1   id2 amount 
0 first_person first_item  10 
1 first_person second_item  6 
2 second_person first_item  18 
3 second_person second_item  36 

print df.pivot(index='id1', columns='id2', values='amount') 
     .rename_axis(None) 
     .rename_axis(None, axis=1) 

       first_item second_item 
first_person   10   6 
second_person   18   36 
+0

私が必要なものを完璧にフィットしているようです!その名前変更インデックスの問題を実行します。実際、 '.rename_axis(None)'メソッドは、 '名前を変更するためにインデックスを渡す必要があります'というエラーを返します(重要な場合はPython 2.7の下にあります)。 – ysearka

+0

'pandas'のバージョンは何ですか? 'print pd.show_versions()' – jezrael

+0

0.17.1なぜrename_axisが機能しないのかを説明しています。 – ysearka

関連する問題