У меня большой фрейм данных, которым я не могу поделиться здесь. Есть 509762 строк и 49 столбцов. Это данные временного ряда, и все 22 * 1006 * последовательных строк имеют одинаковый идентификатор. Я пытаюсь сделать эти 22 * 1008 * строк одной строкой, и у меня есть ограничения по времени.
play_ids = df_train['PlayId'].unique()
df_train_plays = pd.DataFrame(np.zeros((len(play_ids), 385)))
player_features = ['Team', 'X', 'Y', 'S', 'A', 'Dis', 'Orientation', 'Dir', 'NflId', 'DisplayName', 'JerseyNumber', 'PlayerHeight', 'PlayerWeight', 'PlayerBirthDate', 'PlayerCollegeName', 'Position']
# Repeating Non-player features after flattening the play_df
play_cols_to_drop = [49, 50, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97]
for i, play in enumerate(play_ids):
# Iterating over play_ids and making vectors from them
play_df = df_train[df_train['PlayId'] == play].values.flatten()
play_df = pd.DataFrame(play_df).T
# Dropping the repeating non-player features
for col in play_cols_to_drop:
cols = [i for i in range(col, 1078, 49)]
play_df.drop(columns=cols, inplace=True)
# Writing the values of new vector into the df_train_plays
# This is the part which takes most of time... It has to be done inplace
df_train_plays.loc[i, :] = play_df.values[0]
print(f'Reshaped Play {i}')
Я попробовал этот подход. Он в основном повторяет эти идентификаторы, выравнивает их, удаляет дубликаты столбцов и записывает их в новый файл. Я должен сделать эту операцию 23171 раз, и это занимает слишком много времени. Запись в новый фрейм данных занимает слишком много времени, поэтому операция должна быть на месте.
Я переключился на другой подход на месте и сделал из этих данных огромный вектор. Имеет 23,9 миллионов строк. На этот раз я должен преобразовать каждые 1034 строк в столбец. Как я могу сделать это без зацикливания?
df_train_plays = df_train.set_index(['PlayId', 'Team'])
pd.concat([df_train_plays[col] for col in df_train_plays])