как объединить эти списки в зависимости от TH и PR в заголовке списка

#pandas #list #dataframe #web-scraping #beautifulsoup

Вопрос:

 import pandas as pd, win32com.client as win32, fire
from colorama import Fore, init
from os.path import abspath
from timeit import default_timer as timer
def res_loop(sample="302060",
             from_seat="302061",
             to_seat="302065",
             export_file_name="excelfile"):
 
    f_no = str(sample)[0:2]
    df = pd.read_html(f"https://msbte.org.in/DISRESLIVE2021CRSLDSEP/COV6139QS21LIVEResult/SeatNumber/{f_no}/{sample}Marksheet.html")
    df_sub = df[1][0]
    #print(df)
    sub_name = [ df_sub[i] for i in range(2, len(df_sub)) if type( df_sub[i] ) == str ]
    print(sub_name)
    #print(df_sub) #Subjects Names
    df_thph=df[1][1]
    thph=[df_thph[i] for i in range(2,len(df_thph)) if type(df_thph[i])==str]
    print(thph)
    headers = []

    df_heads=df[1][2]
    #print(df_heads)
    heads=[df_heads[i] for i in range(2,len(df_heads)) if type( df_heads[i]) ==str]
    print(heads)
 

Нужна помощь в построении заголовка столбца для хранения этих данных.
Он выдает результат, как показано ниже

 sub_name=['MAN', 'PWP','MAD', 'ETI', 'NIS', 'EDP', 'CAP']
head=['TH', 'TH', 'PR', 'TH', 'PR', 'TH', 'TH', 'PR', 'PR', 'PR']
exam=['ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA', '
ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA', 'ESE', 'PA']
 

Ожидаемый Результат:

 h1=['MAN-TH-ESE','MAN-TH-PA','PWP-TH-ESE','PWP-TH-PA','PWP-PR-ESE','PWP-PR-PA','MAD-TH-ESE','MAD-TH-PA','MAD-PR-ESE','MAD-PR-PA','ETI-TH-ESE','ETI-TH-PA','NIS-TH-ESE','NIS-TH-PA','NIS-PR-ESE','NIS-PR-PA','EDP-PR-ESE','EDP-PR-PA','CAP-PR-ESE','CAP-PR-PA']
 

Я сделал это вручную для одной ветви, она не работает, если данные меняются.

Комментарии:

1. Пожалуйста, проясните вашу конкретную проблему или предоставьте дополнительные сведения, чтобы точно указать, что вам нужно. Поскольку это написано в настоящее время, трудно точно сказать, о чем вы просите.

Ответ №1:

Похоже, вы можете просто использовать .ffill() (прямое заполнение) для этих столбцов. Затем объедините их в виде списка:

 import pandas as pd, win32com.client as win32, fire
from colorama import Fore, init
from os.path import abspath
from timeit import default_timer as timer
def res_loop(sample="302060",
             from_seat="302061",
             to_seat="302065",
             export_file_name="excelfile"):
 
    f_no = str(sample)[0:2]
    url = f"https://msbte.org.in/DISRESLIVE2021CRSLDSEP/COV6139QS21LIVEResult/SeatNumber/{f_no}/{sample}Marksheet.html"
    df = pd.read_html(f"https://msbte.org.in/DISRESLIVE2021CRSLDSEP/COV6139QS21LIVEResult/SeatNumber/{f_no}/{sample}Marksheet.html")
    df_sub = df[1]
    
    for col in [0, 1]:
        df_sub[col] = df_sub[col].ffill()
    
    
    h1 = list(df_sub.iloc[2:,0]   '-'   df_sub.iloc[2:,1]   '-'   df_sub.iloc[2:,2])
    print(h1)
 

Выход:

 ['MANAGEMENT-TH-ESE', 'MANAGEMENT-TH-PA', 'PROGRAMMING WITH PYTHON-TH-ESE', 'PROGRAMMING WITH PYTHON-TH-PA', 'PROGRAMMING WITH PYTHON-PR-ESE', 'PROGRAMMING WITH PYTHON-PR-PA', 'MOBILE APPLICATION DEVELOPMENT-TH-ESE', 'MOBILE APPLICATION DEVELOPMENT-TH-PA', 'MOBILE APPLICATION DEVELOPMENT-PR-ESE', 'MOBILE APPLICATION DEVELOPMENT-PR-PA', 'EMERGING TRENDS IN COMPUTER AND INFORMATION TECHNOLGY-TH-ESE', 'EMERGING TRENDS IN COMPUTER AND INFORMATION TECHNOLGY-TH-PA', 'NETWORK AND INFORMATION SECURITY-TH-ESE', 'NETWORK AND INFORMATION SECURITY-TH-PA', 'NETWORK AND INFORMATION SECURITY-PR-ESE', 'NETWORK AND INFORMATION SECURITY-PR-PA', 'ENTERPRENURESHIP DEVELOPMENT-PR-ESE', 'ENTERPRENURESHIP DEVELOPMENT-PR-PA', 'CAPSTONE PROJECT âx80x93EXECUTION amp; REPORT WRITING-PR-ESE', 'CAPSTONE PROJECT âx80x93EXECUTION amp; REPORT WRITING-PR-PA']