任何人都可以提出一种有效的方法来将一列(在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
...
答案 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