2017-02-21 9 views
0

追加の列を持つという追加の問題で、Pandas Dataframeをどのようにピボットするかという簡単な質問があります。余分な列を持つPandas Pivot

データセットは、この1のようになります。

X = pd.DataFrame({'country':['Peru','Peru','Japan','Japan'],'method':['m1','m2','m1','m2'], 'value':[1,2,3,4]}) 

Country | Method | Value 
Peru  | m1  | 1 
Peru  | m2  | 2 
Japan  | m1  | 3 
Japan  | m2  | 4 

すべて「国が」私は列として、それぞれの国で、このデータフレームを回転したいと思いますが、私が運ぶために必要なすべての「方法」 の値を持っています方法について:

Peru | Japan | Method 
1 | 3  | m1 
2 | 4  | m4 

ありがとうございます!

+1

'X.pivot( 'メソッド'、 '国 '、'値 ') '?なぜあなたは 'm4'を持っていますか? – Psidom

答えて

1

あなたは、私はまた、クリーンな出力の列の名前を削除している.reset_index

によってXフォローに.pivotを適用する必要があります。

df = X.pivot(index='method',columns='country',values='value').reset_index() 
df.columns.name = '' 
print(df) 

出力:

method Japan Peru 
0  m1  3  1 
1  m2  4  2 
0

ソリューションset_indexとし、unstack


しかし

print (X.set_index(['method','country'])['value'] 
     .unstack(fill_value=0) 
     .rename_axis(None, axis=1) 
     .reset_index()) 

    method Japan Peru 
0  m1  3  1 
1  m2  4  2 
エラーを取得した場合(なぜならペア methodで重複し、 country列):

ValueError: Index contains duplicate entries, cannot reshape

groupbyとソリューションとmeanのようないくつかの集約関数(sum、...)デフォルトaggfunc=np.mean

X = pd.DataFrame({'country':['Peru','Peru','Peru','Japan'], 
        'method':['m1','m2','m1','m2'], 
        'value':[1,2,3,4]}) 
print (X) 
    country method value 
0 Peru  m1  1 
1 Peru  m2  2 
2 Peru  m1  3 <-duplicates Peru, m1 
3 Japan  m2  4 

print (X.groupby(['method','country'])['value'].mean() 
     .unstack(fill_value=0) 
     .rename_axis(None, axis=1) 
     .reset_index()) 

    method Japan Peru 
0  m1  0  2 
1  m2  4  2 

またはpivot_table

print (X.pivot_table(index='method', 
        columns='country', 
        values='value', 
        fill_value=0, 
        aggfunc=np.mean). 
        rename_axis(None, axis=1). 
        reset_index()) 

    method Japan Peru 
0  m1  0  2 
1  m2  4  2 
関連する問題