沿一列从长到宽重塑DataFrame

时间:2019-03-27 00:16:01

标签: python python-3.x pandas

我正在寻找一种将下面的表A重新配置为表B的方法。

表A:

type   x1  x2  x3  
A      4   6   9  
A      7   4   1  
A      9   6   2   
B      1   3   8  
B      2   7   9

转换为表B:

type   x1  x2  x3  x1'  x2'  x3'  x1'' x2'' x3''  
A      4    6   9   7    4   1    9     6   2  
B      1    3   8   2    7   9   NA     NA  NA

真正的表A超过150000行36列。具有2100个唯一的“类型”值。

1 个答案:

答案 0 :(得分:2)

您可以适当设置索引,然后设置unstack

df

  type  x1  x2  x3
0    A   4   6   9
1    A   7   4   1
2    A   9   6   2
3    B   1   3   8
4    B   2   7   9

res = (df.set_index(['type', df.groupby('type').cumcount()])
         .unstack()
         .sort_index(level=-1, axis=1))

res.columns = res.columns.map(lambda x: x[0] + "'" * int(x[1]))    
res
       x1   x2   x3  x1'  x2'  x3'  x1''  x2''  x3''
type                                                
A     4.0  6.0  9.0  7.0  4.0  1.0   9.0   6.0   2.0
B     1.0  3.0  8.0  2.0  7.0  9.0   NaN   NaN   NaN