Я пытаюсь сгруппировать строки моего фрейма данных по двум столбцам, а затем вычислить среднее значение по каждому столбцу каждой группы, кроме тех, которые определяют группировки. Я понимаю, что это похоже на другие вопросы SO, но формат вывода, который мне нужен, отличается от других вопросов, которые я видел. В основном я хочу, чтобы вычисленные средства были свернуты в одну строку и добавлены к выходному кадру данных в том же формате, что и исходный df.
Я думаю, что это, вероятно, работа для groupby, но я никогда не понимал, синтаксис того, как передать его вывод в другой фрейм данных как одну строку с идентичными заголовками исходного df? Следующий ответ от здесь не совсем правильный, поскольку он устанавливает столбцы 'groupby' в качестве индексов, мне нужно, чтобы результат был таким же, как строка исходного df:
stats_df.groupby(['features','window']).mean()
Следующая функция работает, но на мои данные уходит почти 2 часа, а это всего лишь 1 миллион строк и ~ 60 столбцов в ширину, поэтому в идеале решение должно быть быстрее, чем это итеративное решение.
def calculate_feature_means(unfilterd_models_path):
stats_df = pd.read_csv(unfilterd_models_path)
features = stats_df['features'].unique().tolist()
windows = stats_df['window'].unique().tolist()
print(len(stats_df['features'].tolist()), len(features))
means = pd.DataFrame()
for feature in features:
for window in windows:
row = stats_df[(stats_df['features'] == feature) & (stats_df['window'] == window)]
row_out = row.mean()
row_out['features'] = feature
row_out['model'] = row['model'].tolist()[0]
row_out['path'] = row['path'].tolist()[0]
means = means.append(row_out, ignore_index=True)
#print(row_out)
#end
unfilterd_models_path_means = unfilterd_models_path.split('.csv')[0] + '_means.csv'
means.to_csv(unfilterd_models_path_means, index=False)
return unfilterd_models_path_means
Я уверен, что это будет быстрое решение для тех, кто сделал больше, чем несколько групповых знакомств. Большое спасибо