从长到宽重塑熊猫数据框时的自定义变量名称

阿图罗·斯布尔

我有以下数据框:

import numpy as np
import pandas as pd
silly = pd.DataFrame({'id':[i for i in range(3) for j in range(3)], 'cat':['a','b','c'] * 3, 'v1':np.random.random(9), 'v2':np.random.random(9)})
print(silly)

   id cat        v1        v2
0   0   a  0.374509  0.211018
1   0   b  0.132380  0.996551
2   0   c  0.194045  0.956656
3   1   a  0.475134  0.892442
4   1   b  0.166790  0.615519
5   1   c  0.285272  0.896530
6   2   a  0.397225  0.147312
7   2   b  0.504841  0.679368
8   2   c  0.595551  0.625830

我需要将这些数据从长格式转换为宽格式。为此,我尝试过:

silly_wide = silly.pivot(index='id', columns='cat', values=['v1','v2'])
print(silly_wide)

           v1                            v2                    
cat         a         b         c         a         b         c
id                                                             
0    0.374509  0.132380  0.194045  0.211018  0.996551  0.956656
1    0.475134  0.166790  0.285272  0.892442  0.615519  0.896530
2    0.397225  0.504841  0.595551  0.147312  0.679368  0.625830

这有效,但我需要“展平”列名以获得自定义列名。所需的结果应如下所示:

id         v1a       v1b       v1c       v2a       v2b       v2c                                                            
 0    0.374509  0.132380  0.194045  0.211018  0.996551  0.956656
 1    0.475134  0.166790  0.285272  0.892442  0.615519  0.896530
 2    0.397225  0.504841  0.595551  0.147312  0.679368  0.625830

有没有pandas.DataFrame.pivot()可以帮助的参数否则怎么办?

亚历山大
>>> silly.pivot(values='value', columns='cat', index='id').add_prefix('value_')
cat   value_a   value_b   value_c
id                               
0    0.207024  0.412420  0.001094
1    0.990861  0.386278  0.092327
2    0.093256  0.984317  0.721615

对于多个值列的修订数据,您可以使用列表理解将列名中的不同级别连接起来:

silly_wide = silly.pivot(values=['v1', 'v2'], columns='cat', index='id')
silly_wide.columns = [''.join(col) for col in silly_wide.columns]
>>> silly_wide
         v1a       v1b       v1c       v2a       v2b       v2c
id                                                            
0   0.625485  0.846527  0.987203  0.261629  0.767406  0.138268
1   0.305565  0.151946  0.687424  0.460385  0.825205  0.768997
2   0.327507  0.215792  0.796235  0.018233  0.734781  0.423353

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章