Python将列重塑为多列-交替行
有谁能提出一种有效的方法,通过交替的列分配,将一个列(在python数据帧中)重塑为多个列。我可以用一个循环来实现这一点,但不知道是否有更优雅的方式。举个例子,考虑下面的例子: 添加:是否有解决方案可以将单个列中的每n个值重新整形为n个单独的列,例如,将具有n个变量的单个列整形为n列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
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
modulen
作为键
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行中!注意下面两种答案的区别。这是一个细节,最好包含在问题描述或示例数据中,以消除歧义。