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

Python将列重塑为多列-交替行,python,pandas,Python,Pandas,有谁能提出一种有效的方法,通过交替的列分配,将一个列(在python数据帧中)重塑为多个列。我可以用一个循环来实现这一点,但不知道是否有更优雅的方式。举个例子,考虑下面的例子: 添加:是否有解决方案可以将单个列中的每n个值重新整形为n个单独的列,例如,将具有n个变量的单个列整形为n列 Col 1 x1 2 y1 3 z1 4 x2 5 y2 6 z2 7 x3 8 y3 9 z3 .. 到 您可以使用: df_final=(pd.DataFrame(df.groupby(d

有谁能提出一种有效的方法,通过交替的列分配,将一个列(在python数据帧中)重塑为多个列。我可以用一个循环来实现这一点,但不知道是否有更优雅的方式。举个例子,考虑下面的例子:

添加:是否有解决方案可以将单个列中的每n个值重新整形为n个单独的列,例如,将具有n个变量的单个列整形为n列

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

您可以使用:

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


您可以使用辅助变量作为行和列索引,然后应用
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
aux       x   y   z
aux_idx            
0        x1  y1  z1
1        x2  y2  z2
2        x3  y3  z3
对于只计算元素数量的相同结果,请使用
df.index
module
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            
1        x1  y1  z1
2        x2  y2  z2
3        x3  y3  z3
aux       x   y   z
aux_idx            
0        x1  y1  z1
1        x2  y2  z2
2        x3  y3  z3

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

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

可能值得注意的是:这假设字符串值实际上是分组键,这在原始问题中是不清楚的,因为只有当数据按大小为3的“bucket”排序时,您的解决方案才有效,这是毫无价值的,正如您正确地陈述的那样。猜测问题的精确性不可避免地与答案的质量有关:)同意,需要从OP中进行澄清。我根据编辑的答案可能值得注意:这假设字符串值实际上是分组键,原始问题中不清楚的是,您的实际值是否与您作为样本数据给出的值相似?i、 例如,您试图分别使用字符串值的开头和结尾作为索引和列名?还是只关心每三个值移动一行?嘿。主要涉及将列中的每n个值移动到n行中!注意下面两种答案的区别。这是一个细节,最好包含在问题描述或示例数据中,以消除歧义。