2017-06-30 49 views
2

我想重新安排一个熊猫数据框。熊猫:将一列分组,并创建新的列标题

目前我有:

id mins param 
1 10 0.15 
1 11 0.16 
1 12 0.17 
2 10 0.20 
2 11 0.21 
2 12 0.22 

但我想通过ID重新安排和团体有:

id param_10 param_11 param_12 
1 0.15  0.16  0.17 
2 0.20  0.21  0.22 

是否有一个有效的方式大熊猫做到这一点?或者我应该慢慢地手动研磨一切?

感谢

回答

5

使用pivotunstackset_index和最后一个add_prefix

df = df.pivot(index='id', columns='mins', values='param').add_prefix('param_') 
print (df) 
mins param_10 param_11 param_12 
id         
1   0.15  0.16  0.17 
2   0.20  0.21  0.22 

df = df.set_index(['id','mins'])['param'].unstack().add_prefix('param_') 
print (df) 
mins param_10 param_11 param_12 
id         
1   0.15  0.16  0.17 
2   0.20  0.21  0.22 

如果错误:

ValueError: Index contains duplicate entries, cannot reshape

它意味着重复,需要聚合。使用pivot_tablegroupby与像mean功能(summedian,...)和最后unstack

print (df) 
    id mins param 
0 1 10 0.15 <- id mins dupe 
1 1 10 0.50 <- id mins dupe 
2 1 11 0.16 
3 1 12 0.17 
4 2 10 0.20 
5 2 11 0.21 
6 2 12 0.22 

df = df.pivot_table(index='id', columns='mins', values='param', aggfunc='mean') 
     .add_prefix('param_') 
print (df) 
mins param_10 param_11 param_12 
id         
1  0.325  0.16  0.17 <- (0.15+0.5)/2 = 0.325 
2  0.200  0.21  0.22 

df = df.groupby(['id','mins'])['param'].mean().unstack().add_prefix('param_') 
print (df) 
mins param_10 param_11 param_12 
id         
1  0.325  0.16  0.17 <- (0.15+0.5)/2 = 0.325 
2  0.200  0.21  0.22 

清洁时由rename_axis设置columns nameNone和使用reset_indexid列:

df = df.rename_axis(None, axis=1).reset_index() 
print (df) 
    id param_10 param_11 param_12 
0 1  0.325  0.16  0.17 
1 2  0.200  0.21  0.22 

编辑:

解决方案与多列:

df['param1'] = df['param']/4 
print (df) 
    id mins param param1 
0 1 10 0.15 0.0375 
1 1 10 0.50 0.1250 
2 1 11 0.16 0.0400 
3 1 12 0.17 0.0425 
4 2 10 0.20 0.0500 
5 2 11 0.21 0.0525 
6 2 12 0.22 0.0550 

df = df.pivot_table(index='id', columns='mins', values=['param', 'param1'], aggfunc='mean') 
df.columns = ['_'.join((x[0], str(x[1]))) for x in df.columns] 
print (df) 
    param_10 param_11 param_12 param1_10 param1_11 param1_12 
id                
1  0.325  0.16  0.17 0.08125  0.0400  0.0425 
2  0.200  0.21  0.22 0.05000  0.0525  0.0550 
+0

现将我!谢谢! –

+0

看到一个错误ValueError:索引包含重复的条目,不能使用第一种方法重塑...尝试第二个... –

+0

谢谢jezrael,这很好!我是否也可以对多个参数进行此操作,例如如果我有paramA和param B? –

相关问题