【发布时间】:2020-05-01 17:07:57
【问题描述】:
我正在做一个处理大型数据集的项目。但是,现在我只想进行比较,但我找不到如何做到这一点。简单来说一个更简单的问题,我的问题如下。我有 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 组平均值 - 第 1 行 B 值)/ g 组平均值 但是,对于第二行,它已经是 (h 组平均值 - 第 2 行 B 值)/ h 组平均值 对于第 3 行 (第 j 组平均值 - 第 3 行 B 值)/ 第 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'])
【问题讨论】:
-
如果您创建另一个图表来说明您希望它的外观,这可能会有所帮助,因为我无法将最终产品可视化。