Добавить колонку данных из списка в dataframe pandas

Есть такой код:

result_table = []
for url in urls_list:
    
    response = s2.get(url=url, headers=headers)
    soup2 = BS(response.text, 'lxml')

    
    try:
        table = pd.read_html(url) 
    
    except:
        print('table not exist')
        continue
    
    result_table.append(table)


final_table = pd.DataFrame() 

for t in result_table:

    final_table = final_table.append(t)

final_table.to_excel("razm.xlsx")

Итог выполнения кода условно выглядит вот так:

   Col1       Col2
0     1  RowTable1
1     2  RowTable1
2     3  RowTable2
3     4  RowTable2
4     5  RowTable3

затем мне необходимо строке типа RowTable1 присвоить свое значение, чтобы итог выглядел вот так:

lst = [259, 178, 305]

   Col1       Col2
0   259  RowTable1
1   259  RowTable1
2   178  RowTable2
3   178  RowTable2
4   305  RowTable3

Я попробовала реализовать это следующим способом:

lst = [259, 178, 305]
it = iter(lst)

final_table["Col1"] = final_table.groupby("Col2")["Col1"].transform(lambda x: [next(it, None)] * len(x))

Когда строк немного - все работает отлично, но когда их большое количество индексы из списка lst присваиваются не по порядку, а вразброс. Т.е. в первых строках - идет по порядку, затем идет вразнобой. Хотя сами строки RowTable - по порядку. Никак не могу понять, в чем дело.

Использую:

  • pandas: 1.3.1
  • python: 3.8.0

Ответы (1 шт):

Автор решения: strawdog

Вообще, как-то слишком хитро вы себе придумали. Так-то проще и эффективнее будет вроде:

import numpy as np
final_table["Col1"] = np.array(lst)[final_table.groupby("Col2").ngroup()]
→ Ссылка