Pandas вычислить groupby для очень большого фрейма данных и вывода с исходными заголовками df? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь сгруппировать строки моего фрейма данных по двум столбцам, а затем вычислить среднее значение по каждому столбцу каждой группы, кроме тех, которые определяют группировки. Я понимаю, что это похоже на другие вопросы 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

Я уверен, что это будет быстрое решение для тех, кто сделал больше, чем несколько групповых знакомств. Большое спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...