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()方法到底做了什么?见: