Удалить данные =, разделить на все, что вы видите:
df_split = df['input'].str.replace('data=', '').str.split(r' |/|\?|\.', expand=True).replace('', np.nan).dropna(how='all', axis=1)
then you can rename your columns as you wish.
Редактировать: я добавил сброс пустых столбцов.
Редактировать2: чтобы учесть отсутствующее имя хоста, разделить отдельно :
df_split1 = df['input'].str.split(r'\?data=', expand=True)
df_left = df_split1.loc[:, 0].str.rsplit(r'/', n=5, expand=True)
df_right = df_split1.loc[:, 1].str.split(r'\.| ', expand=True)
df_left['option_a'] = df_left.iloc[:, 0].str.split(r'/', expand=True).iloc[:, -1].fillna(df_left.iloc[:, 0])
df_left['sitename'] = df_left.iloc[:, 0].apply(lambda x: np.NaN if '/' not in x else re.split(r'/', x)[0])
, затем concat
df = pd.concat([df_left, df_right], axis=1).iloc[:, 1:].replace('', np.nan).dropna(how='all', axis=1)
, затем выполните оставшееся переименование столбцов.