2016-10-18 2 views
1

は、いくつかのGROUPBY操作の後、私はこのようなデータフレームを持っている、のは、言ってみましょう:(おそらくグループ化された)行の値

data = pd.DataFrame(columns=['Key', 'Subkey', 'Value']) 
data.loc[0] = ['foo1', 'bar1', 20] 
data.loc[1] = ['foo1', 'bar2', 10] 
data.loc[2] = ['foo1', 'bar3', 5] 
data.loc[3] = ['foo2', 'bar1', 50] 
data.loc[4] = ['foo2', 'bar2', 100] 
data.loc[5] = ['foo2', 'bar3', 50] 

私はその後、持っていることは、このようになります。データフレームです:

|Key |Subkey | Value | 
+----+-------+-------+ 
|foo1|bar1 |20  | 
|foo1|bar2 |10  | 
|foo1|bar3 |5  | 
|foo2|bar1 |50  | 
|foo2|bar2 |100 | 
|foo2|bar3 |50  | 

私が望むのは、サブキーが新しい列で、上記のグループ化されたフレームと同じ値を含む新しいデータフレームです。

|Key |bar1 |bar2 |bar3 | 
+----+-----+------+------+ 
|foo1| 20 | 10 | 5 | 
|foo2| 50 | 100 | 50 | 

これには1行の解決策がありますか、またはプログラムによってデータフレームを変換する必要がありますか?

答えて

2

あなたはpivotを使用することができます。

print (data.pivot(index='Key', columns='Subkey', values='Value')) 
Subkey bar1 bar2 bar3 
Key      
foo1 20.0 10.0 5.0 
foo2 50.0 100.0 50.0 

次にあなたは、intfloat値をキャストreset_indexやカラム名Subkey削除することができます。

print (data.pivot(index='Key', columns='Subkey', values='Value') 
      .astype(int) 
      .reset_index() 
      .rename_axis(None, axis=1)) 

    Key bar1 bar2 bar3 
0 foo1 20 10  5 
1 foo2 50 100 50 
関連する問題