У меня есть следующий фрейм данных:
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()
параметр, который может помочь? Как это можно сделать иначе?