У меня есть датафрейм, который выглядит так:
df = pd.DataFrame(
{'tod': [[('a',10),('b',6),('h',3),('p',2)],
[('x',11),('e',2),('l',2)],
[('r',5),('l',5)],
[('n',15)]]})
tod
0 [(a, 10), (b, 6), (h, 3), (p, 2)]
1 [(x, 11), (e, 2), (l, 2)]
2 [(r, 5), (l, 5)]
3 [(n, 15)]
Я хочу расширить список кортежей до новых столбцов, чтобы получить:
tod l1 n1 l2 n2 l3 n3 l4 n4
0 [(a, 10), (b, 6), (h, 3), (p, 2)] a 10 b 6 h 3 p 2
1 [(x, 11), (e, 2), (l, 2)] x 11 e 2 l 2 - nan
2 [(r, 5), (l, 5)] r 5 l 5 - nan - nan
3 [(n, 15)] n 15 - nan - nan - nan
Я хочу получить пропущенные значения в соответствующих столбцах, если кортежи не существуют.
У меня проблемы с тем, что длина каждого списка (количество кортежей) в каждой ячейке отличается для каждой строки, поэтому я хочу динамически назначать новые значения столбцов по мере их появления. Также каждая ячейка содержит список пар кортежей, а не один кортеж.
Я пробовал что-то подобное в этом вопросе, но это позволило только разложить один кортеж в несколько столбцов (если вы знаете столбцы до этого).
Затем я посмотрел на это и это , но опять-таки, число столбцов неизвестно, поэтому я получил:
pd.DataFrame.from_records([{k: v for v, k in row} for row in df.tod])
Out[171]:
2 3 5 6 10 11 15
0 p h NaN b a NaN NaN
1 l NaN NaN NaN NaN x NaN
2 NaN NaN l NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN NaN n
Затем я посмотрел на клетки разбиения, которые содержат кортежи здесь и здесь , которые смотрели на преобразование кортежей в серию, но опять-таки, это не сработало, так как эти примеры имеют дело только с с одиночными кортежами известной длины, без списков кортежей
Как я могу подойти к этой проблеме?
Примечание: я понимаю, что я не выложил много кода для "Что вы пробовали" - моя консоль - куча мусора, которая выдает непрерывные ошибки. В интересах поддержания чистоты я оставил это.