我有以下数据:
Node Case dx dy dz
1 A1 338.5E-9 0.0 163.6E-9
1 A2 0.0 0.0 0.0
1 A3 -133.4E-9 -268.4E-9 -22.36E-6
5 A1 192.6E-9 0.0 -22.47E-9
5 A2 0.0 0.0 0.0
5 A3 231.5E-9 -268.4E-9 -35.82E-6
我想迭代遍历数据的每一行,并将“ dx”,“ dy”和“ dz”输出到列表中,或者(最好)在新表上打印-参见下文。我希望代码循环遍历每一行,直到“节点”列变为不同的数字(即从1变为5)。
因此,我希望新表上的第一行数据看起来像这样:
dx1 dy1 dz1 dx2 dy2 dz2 dx3 dy3 dz3
338.5E-9 0.0 163.6E-9 0.0 0.0 0.0 -133.4E-9 -268.4E-9 -22.36E-6
任何帮助将不胜感激。 谢谢
答案 0 :(得分:0)
尝试一下:
df_out = (df.set_index(['Node', df.groupby('Node').cumcount()])[['dx', 'dy', 'dz']]
.unstack().sort_index(level=1, axis=1))
df_out.columns = [f'{i}{j}' for i, j in df_out.columns]
df_out
输出:
dx0 dy0 dz0 dx1 dy1 dz1 dx2 dy2 dz2
Node
1 3.385000e-07 0.0 1.636000e-07 0.0 0.0 0.0 -1.334000e-07 -2.684000e-07 -0.000022
5 1.926000e-07 0.0 -2.247000e-08 0.0 0.0 0.0 2.315000e-07 -2.684000e-07 -0.00003
将+1加到cumcount:
df_out = (df.set_index(['Node', df.groupby('Node').cumcount() + 1])[['dx', 'dy', 'dz']]
.unstack().sort_index(level=1, axis=1))
df_out.columns = [f'{i}{j}' for i, j in df_out.columns]
df_out
输出:
dx1 dy1 dz1 dx2 dy2 dz2 dx3 dy3 dz3
Node
1 3.385000e-07 0.0 1.636000e-07 0.0 0.0 0.0 -1.334000e-07 -2.684000e-07 -0.000022
5 1.926000e-07 0.0 -2.247000e-08 0.0 0.0 0.0 2.315000e-07 -2.684000e-07 -0.000036