Я делаю проект, который имеет дело с большим набором данных. Однако теперь я хотел сделать простое сравнение, и я не могу найти, как я могу это сделать. Проще говоря, к более простой проблеме, моя проблема заключается в следующем. У меня есть 3 разных столбца и 6 строк:
A B C
g 1 2
h 2 1
j 3 3
h 3 3
g 4 3
j 5 4
Первое, что я хотел сделать, это рассчитать среднее, медиану и моду B с учетом группы A. Итак, я сделал так, и пока все хорошо:
aggregations_proc = {'C': { 'Mean_proc': 'mean', 'Median_proc': 'median',
'Mode_proc': lambda x: x.mode()}}
groupy_proc = df.groupby('A', as_index=False).agg(aggregations_proc)
Однако теперь моей целью было просто создать новый столбец, представляющий расчет средней относительной ошибки для каждой из строк между B и средним значением C, учитывая, что среднее значение варьируется для каждой группы. Например, для первой строки относительная ошибка будет следующей: (Среднее значение группы g — значение B 1-й строки) / Среднее значение группы g. Однако для второй строки это уже будет (Среднее значение группы h — значение B 2-й строки) / Среднее значение группы h И для 3-й строки (среднее значение группы j — значение B 3-й строки) / среднее значение группы j Но это относится к гораздо большему набору данных.
Любая помощь будет очень кстати!
[ОБНОВИТЬ]
Вот мой новый код. Я думаю, что все работает, но я предполагаю, что есть какая-то ошибка в режиме. Ошибка: «Столбцы должны быть той же длины, что и ключ». Код следующий:
aggregations_diag = ('mean', 'median', lambda x: x.mode().iloc[0])
groupy_diag = df.groupby('A', as_index=False)
['B'].agg(aggregations_diag)
def absolute_error_diag(x):
stats = ['mean', 'median', lambda x: x.mode().iloc[0]]
avg = groupy_diag.loc[x['A'], stats]
return (avg - x['B'])
# Columns for the absolute error of each row
columns_names_diag = ['ae_diag_mean','ae_diag_median','ae_diag_mode']
df[columns_names_diag] = df.apply(absolute_error_diag, axis=1)
[MAE_diag_mean, MAE_diag_median, MAE_diag_mode] =
df[columns_names_diag].sum()/len(df['ae_diag_mean'])