2017-02-21 50 views
0

我有一個簡單的問題,關於如何將額外的問題有一個額外的列的熊貓數據框。熊貓支持額外的列

數據集看起來像這樣的:

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

申請.pivotX後續我也刪除列的名稱乾淨的輸出。

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_indexunstack

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 

但如果出現錯誤(因爲重複在一對methodcountry列):

ValueError: Index contains duplicate entries, cannot reshape

groupby解決方案和像mean一些聚合函數(sum,...)

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默認aggfunc=np.mean

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