Вместо того, чтобы не давать ответ в комментариях, вот полупсевдокод, чтобы объяснить, как я это сделал, дайте мне знать, если вам нужна дополнительная информация / уточнение
# dictionary to define your target structure
target_d = {'date':'','id':'','column_name':'','column_value':''}
# dictionary for source structure
source_d = {'date':'date','id':'id','column_name1':'','column_name2':''....}
с этим указанием выше вы объявляете, что если поле сопоставлено, оно не будет динамическим, все другие поля / столбцы будут поворачиваться, вы можете сделать его динамичным, используя исходную таблицу DDL
# assuming you already read your source data
# your while loop to go thru the coming data
while <your code here>
# create a dict to process an incoming row
curr_d = target_d.copy()
curr_d['date'] = date from incoming record
curr_d['id'] = id from incoming record
# since we are going to create a row for each column name/value combos
# we need a new dict to hold the values
out_d = curr_d
эта строка служит двум целям: создать новый dict для выходной строки и сохранить постоянную часть выходной строки (т. Е. Date и id)
# rest of the fields are going to be pivoted now
for afield in source_d:
if afield not in source_d.values():
curr_d['column_name'] = afield
curr_d['column_value'] = column value from incoming record
create a 'row' from your out_d dict
write to output/ append to output data frame (if you use a data frame)
Хотя цикл будет проходить через исходные строки, цикл for создаст новую строку для каждого комбинированного имени / значения столбца для цели
Дайте мне знать, если это работает для вас.