我有以下数据框:
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] 删除。
我来说两句