2017-02-21 51 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