Вам нужно будет перебрать my_dict
и построить словарь для каждой строки. Ваши ключи словаря также должны быть созданы для каждого из 3 элементов, в этом случае zip()
используется для объединения каждого значения с x
y
и z
:
import os
import csv
import collections
from csv import DictWriter
with open(r'incsv_new.csv', 'r', newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
next(reader) # skip over the header
my_dict = collections.defaultdict(dict)
for row in reader:
my_dict[row[0]][row[1]] = [row[2], row[3], row[4]]
with open(r'outcsv_new.csv', 'w', newline='') as wf:
fieldnames = ['ID','x_Mv_biw', 'y_Mv_biw', 'z_Mv_biw', 'x_Ins_slt_po_zd', 'y_Ins_slt_po_zd', 'z_Ins_slt_po_zd', 'x_Slb_po_zd', 'y_Slb_po_zd', 'z_Slb_po_zd', 'x_Slb_dkz', 'y_Slb_dkz', 'z_Slb_dkz', 'x_Ins_slt_dkz', 'y_Ins_slt_dkz', 'z_Ins_slt_dkz']
my_write = csv.DictWriter(wf, fieldnames=fieldnames, delimiter=';', restval=-1)
my_write.writeheader()
for id, values in my_dict.items():
row = {'ID':id}
for key, values_xyz in values.items():
for xyz, value in zip("xyz", values_xyz):
row[f'{xyz}_{key}'] = value
my_write.writerow(row)
Предоставление вам выходного файла CSV:
ID;x_Mv_biw;y_Mv_biw;z_Mv_biw;x_Ins_slt_po_zd;y_Ins_slt_po_zd;z_Ins_slt_po_zd;x_Slb_po_zd;y_Slb_po_zd;z_Slb_po_zd;x_Slb_dkz;y_Slb_dkz;z_Slb_dkz;x_Ins_slt_dkz;y_Ins_slt_dkz;z_Ins_slt_dkz
a1;10;12;3;35;13;3;-1;-1;-1;-1;-1;-1;15;19;9
b1;65;11;2;20;22;5;-1;-1;-1;-1;-1;-1;-1;-1;-1
a2;25;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1;-1
b2;75;17;7;-1;-1;-1;-1;-1;-1;-1;-1;-1;50;23;1
Строка заголовка также должна быть пропущена при чтении.