Python 从长到宽重塑数据帧时的自定义变量名称

Python 从长到宽重塑数据帧时的自定义变量名称,python,pandas,dataframe,pivot,reshape,Python,Pandas,Dataframe,Pivot,Reshape,我有以下数据帧: 将numpy导入为np 作为pd进口熊猫 Styly=pd.DataFrame({'id':[i代表范围(3)中的i,而j代表范围(3)],'cat':['a','b','c']*3,'v1':np.random.random(9),'v2':np.random.random(9)}) 打印(愚蠢) id cat v1 v2 0 0 0 0.374509 0.211018 1 0 b 0.132380 0.996551 2 0 c 0.194045 0.956656 3 1 a

我有以下数据帧:

将numpy导入为np
作为pd进口熊猫
Styly=pd.DataFrame({'id':[i代表范围(3)中的i,而j代表范围(3)],'cat':['a','b','c']*3,'v1':np.random.random(9),'v2':np.random.random(9)})
打印(愚蠢)
id cat v1 v2
0 0 0 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\u wide=silly.pivot(index='id',columns='cat',value='v1','v2']
打印(宽)
v1 v2
类别a b c a b c
身份证件
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

这回答了你的问题吗?添加一个
values
silly\u-wide=silly.pivot(index='id',columns='cat',values='value')
silly.pivot(index='id',columns='cat',values='value')。重命名轴(无,轴=1)
silly\u-wide.columns=silly\u-wide.columns.to\u-series().str join(“”)
@ZarakiKenpachi确实如此,尽管我没有完全理解代码,而且我相信
.strip()
是多余的。我也没有意识到这实际上被称为“压平指数”。我稍微改变了问题。我添加了另一个值列。
add_prefix()
是否可以推广到更多的列?join()方法到底做了什么?见: