Я хочу ускорить функцию группирования кадров данных pandas для выполнения парного сравнения.
Для данного фрейма данных в нем есть столбцы [x1, x2, x3, x4] со многими строками.(есть миллионы строк)
Я хочу сгруппировать по [x1].(будет десятки тысяч групп)
Затем возьмите первую строку каждой группировки, продублируйте строку N раз, где N - количество строк в группе.Переименуйте заголовки столбцов в: [y1, y2, y3, y4], затем объедините их с исходной группой.
Моя исходная таблица с заголовком:
[x1, x2, x3, x4]
[1, 'p', 45, 62]
[1, 'k', 12, 84]
Перейдите на:
[y1, y2, y3, y4, x1, x2, x3, x4]
[1, 'p', 45, 62, 1, 'p', 45, 62]
[1, 'p', 45, 62, 1, 'k', 12, 84]
Я могу обрабатывать его несколько раз, но он все еще довольно медленный, моя текущая версия.
for name, group in dataframe.groupby(['x1']):
# take first row and make dataframe
duplicated_row = pd.concat([group.iloc[[0]]]*len(group), ignore_index = True)
# create new headers
new_headers = [x.replace('v2', 'v1') for x in list(duplicated_row)]
column_names2 = dict(zip(list(duplicated_row), new_headers))
# rename headers
duplicated_row = duplicated_row.rename(index=str, columns=column_names2)
duplicated_row = duplicated_row.reset_index(drop=True)
# concat two dataframes
full_df = pd.concat([duplicated_row, group.reset_index(drop=True)], axis = 1)
Есть ли какие-нибудь функции, которые я могу извлечь из панд, которые являются родными C, чтобы ускорить это?или это как-то векторизовать?(на весь фрейм данных или на уровне группы)