首页 > 解决方案 > Python:如何根据重复行重塑数据框?

问题描述

我有一个如下所示的数据框

df
     Name   Val1   Val2
0    Mark    0      3
1    Mark    2      3
2    Mark    5      6
3    Mark    7      8
4    Paul   -1      0
5    Paul    2     -3

我想要这样的东西

df
       Name  Val1_0    Val1_1   Val1_2   Val1_3  Val2_0    Val2_1   Val2_2   Val2_3
0      Mark    0          2       5        7       3         3        6        8
1      Paul   -1          2      Nan      Nan      0        -3      Nan     Nan

标签: pythonpandas

解决方案


cumcount然后尝试pivot

df['new'] = df.groupby('Name').cumcount().astype(str)
out = df.pivot(index = 'Name',columns = 'new', values=['Val1','Val2'])
out.columns = out.columns.map('_'.join)
out.reset_index(inplace=True)
Out[170]: 
   Name  Val1_0  Val1_1  Val1_2  Val1_3  Val2_0  Val2_1  Val2_2  Val2_3
0  Mark     0.0     2.0     5.0     7.0     3.0     3.0     6.0     8.0
1  Paul    -1.0     2.0     NaN     NaN     0.0    -3.0     NaN     NaN

推荐阅读