У меня есть следующий список, где, когда появляются значения для 'A', 'B' и 'D', это как начало нового блока данных, поскольку значения для 'Q' и 'T' связаны с предыдущие значения «A», «B» и «D».
L1 = [
['A','01'],['B','22'],['D','Srt'],
['Q','43'],['T','00'],
['Q','11'],['T','43'],
['A','01'],['B','52'],['D','Polt'],
['Q','84'],['T','39'],
['A','01'],['B','34'],['D','Jkq'],
['Q','81'],['T','13'],
['Q','17'],['T','68'],
['Q','77'],['T','15']
]
На изображении ниже я показываю выходную таблицу, которую я ищу. Я показываю одинаковыми цветами значения «Q» и «T», которые принадлежат значениям A, B и D.
Для второго строка в желтом, я заполняю значения A, B и D (01, 22, Srt)
Для второго и третьего ряда в зеленом, я заполняю значения A, B и D (01, 34, Jkq)
Для строки синего цвета, поскольку существует только одна пара значений для Q и T, то для A, B и D. есть только одна строка.
В порядке чтобы кормить Pandas DataFrame, чтобы табулировать его и получить желаемую таблицу, я пытался в настоящее время с кодом ниже, и я получаю этот вывод.
dict = {}
for elem in L1:
if elem[0] not in dict:
dict[elem[0]] = []
dict[elem[0]].append(elem[1:])
>>>
{
'A': [['01'], ['01'], ['01']],
'B': [['22'], ['52'], ['34']],
'D': [['Srt'], ['Polt'], ['Jkq']],
'Q': [['43'], ['11'], ['84'], ['81'], ['17'], ['77']],
'T': [['00'], ['43'], ['39'], ['13'], ['68'], ['15']]}
Но вывод должен иметь следующую структуру:
Out={
'A': ['01','01','01','01','01','01'],
'B': ['22','22','52','34','34','34'],
'D': ['Srt','Srt','Polt','Jkq','Jkq','Jkq'],
'Q': ['43','11','84','81','17','77'],
'T': ['00','43','39','13','68','15'],
}
чтобы сделать pandas.DataFrame(Out)
Как я могу это сделать? спасибо.
ОБНОВЛЕНИЕ
Если список ввода такой:
L1 = [
['A','01'],['B','22'],['D','Srt'],
['Q','43'],['T','00'],
['Q','11'],['T','43'],
['A','01'],['B','52'],['D','Polt'],
['Q','84'],['T','39'],
['A','01'],['B','34'],['D','Jkq'],
['Q','81'],['T','13'],
['Q','17'],['T','68'],['R','05'],
['Q','77'],['T','15']
]
Вывод будет выглядеть следующим образом:
Out={
'A': ['01','01','01','01','01','01'],
'B': ['22','22','52','34','34','34'],
'D': ['Srt','Srt','Polt','Jkq','Jkq','Jkq'],
'Q': ['43','11','84','81','17','77'],
'T': ['00','43','39','13','68','15'],
'R': ['','','','','05','']
}
ОБНОВЛЕНИЕ 2
Вот пример входного файла и это код Я использую его для анализа и генерации списка.
import re
f=open("file.txt","r").read().splitlines()
L1=[]
for line in f:
if re.match(r'[ \t]', line):
v.append(line.replace(' ', '').split('='))
L1
В этом файле значения, начинающиеся с нового «блока» и которые необходимо заполнить, всегда A, B, D и E. После E, может быть 6 или 7 значений, которые не нужно заполнять (RDR, VS, RR, SA, GNA, UNA и / или SERRB), если некоторые из этих значений не всегда появляются, оставьте пустым. Таблица вывода в этом случае будет выглядеть следующим образом: