Python将列重塑为多列-交替行

时间:2019-06-20 16:53:18

标签: python pandas

任何人都可以提出一种有效的方法来将一列(在python pandas数据框中)重塑为多个列,并交替分配列。我可以循环执行此操作,但想知道是否还有更优雅的方法。例如,请考虑以下示例:

已添加:是否有人能将单个列中的每个n个值重塑为n个单独的列,例如从具有n个变量的单列重塑为n列?

  Col
1 x1 
2 y1 
3 z1 
4 x2 
5 y2 
6 z2
7 x3 
8 y3 
9 z3 
..

  x  y  z 
1 x1 y1 z1 
2 x2 y2 z2 
3 x3 y3 z3  
...

3 个答案:

答案 0 :(得分:1)

您可以使用:

df_final=(pd.DataFrame(df.groupby(df.Col.str[-1])['Col'].apply(list)
                   .values.tolist(),columns=['x','y','z']))

    x   y   z
0  x1  y1  z1
1  x2  y2  z2
2  x3  y3  z3

答案 1 :(得分:1)

假设您具有给定形状的正确数量的值,并且只关心按形状对值进行排序而不考虑值本身,则只需重塑基础值即可。

s
    Col
1   x1
2   y1
3   z1
4   x2
5   y2
6   z2
7   x3
8   y3
9   z3

pd.DataFrame(s.values.reshape(3,3))

    0   1   2
0   x1  y1  z1
1   x2  y2  z2
2   x3  y3  z3

答案 2 :(得分:0)

您可以使用辅助变量作为行和列的索引,然后应用df.pivot

df1['aux'] = df1.Col.str[:-1]
df1['aux_idx'] = df1.Col.str[-1:]
print(df1.pivot(index= 'aux_idx', columns='aux', values='Col'))

输出:

aux       x   y   z
aux_idx            
1        x1  y1  z1
2        x2  y2  z2
3        x3  y3  z3

对于仅计算元素数量的相同结果,请使用df.index模块n作为键

df1['aux_idx'] = (df1.index-1)// 3
df1['aux'] = df1.Col.str[:-1]
print(df1.pivot(index= 'aux_idx', columns='aux', values='Col'))

输出:

aux       x   y   z
aux_idx            
0        x1  y1  z1
1        x2  y2  z2
2        x3  y3  z3