我正在做一个处理大型数据集的项目。然而,现在我只想做一个简单的比较,我找不到我该怎么做。简单地说,我的问题如下。我有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组平均值-第二行B值)/h组平均值 第三线呢 (j组平均值-第三行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'])
问题中的
aggregations_proc
函数不在B
列上聚合。进行聚合的一种方法可以是:尽管如此,
apply()
可以与df
和groupy_proc
结合使用。计算平均相对误差的函数可以是:函数调用如下所示:
希望这有帮助。为了提高效率,可以考虑只创建一个方法字典,修改^ {< CD6>}函数
更新:
以下是计算对我有效的平均绝对误差的代码:
相关问题 更多 >
编程相关推荐