2016-05-01 7 views
2

をdcast:パンダは、私はこのようないくつかのデータを持っている

import pandas as pd 
df = pd.DataFrame(index = range(1,13), columns=['school', 'year', 'metric', 'values'],) 
df['school'] = ['id1']*6 + ['id2']*6 
df['year'] = (['2015']*3 + ['2016']*3)*2 
df['metric'] = ['tuition', 'admitsize', 'avgfinaid'] * 4 
df['values'] = range(1,13) 
df 
    school year  metric values 
1  id1 2015 tuition  1 
2  id1 2015 admitsize  2 
3  id1 2015 avgfinaid  3 
4  id1 2016 tuition  4 
5  id1 2016 admitsize  5 
6  id1 2016 avgfinaid  6 
7  id2 2015 tuition  7 
8  id2 2015 admitsize  8 
9  id2 2015 avgfinaid  9 
10 id2 2016 tuition  10 
11 id2 2016 admitsize  11 
12 id2 2016 avgfinaid  12 

Iワイドフォーマットにメトリック&値列を旋回たいです。それは私がしたい、次のとおりです。

df2 <- dcast(df, id + year ~ metric, value.var = "values") 

私はパンダでこれをどのように行うのです。これはRだったら

school year tuition admitsize avgfinaid 
    id1 2015  1   2   3 
    id1 2016  4   5   6 
    id2 2015  7   8   9 
    id2 2016  10   11   12 

、私のような何かをしますか?私はパンダのドキュメントでthis (otherwise very helpful) SO answerthis (also otherwise excellent) exampleを読んだが、私のニーズにそれを適用する方法をgrokしていない。私はdcastのような1ライナーは必要ありません。標準的なDataFrame(groupby、multi-index、または他の派手なオブジェクトではない)で結果を得る方法の例です。

答えて

4

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

In [23]: df2 = (df.pivot_table(index=['school', 'year'], columns='metric', 
    ....:      values='values') 
    ....:   .reset_index() 
    ....:  ) 

In [24]: 

In [24]: df2 
Out[24]: 
metric school year admitsize avgfinaid tuition 
0   id1 2015   2   3  1 
1   id1 2016   5   6  4 
2   id2 2015   8   9  7 
3   id2 2016   11   12  10 
関連する問題