我有一个 Pandas 数据框,我想按集群计算 MEDIAN Absolute Deviation。我假设 Pandas 方法 mad
是中间绝对偏差,但它似乎是平均绝对偏差。我写的代码行是
df['MAD PPGamp'] = df.groupby('Cluster')['PPGamp'].transform('mad')
我试着自己写一个小函数来计算中值绝对偏差
def myMAD(x):
med = np.median(x)
x = abs(x-med)
MAD = np.median(x)
return MAD
并更改我的代码以阅读
df['MAD PPGamp'] = df.groupby('Cluster')['PPGamp'].transform('myMAD')
不幸的是,这不起作用。我得到一个 AttributeError 'SeriesGroupBy' 对象没有属性 'myMAD'。
如何按集群计算数据帧中列的中值绝对偏差,并使用变换正确地跨行广播 MAD 来创建新列?
提前致谢
托马斯·菲利普斯
最佳答案
你很近,需要myMAD
相反 'myMAD'
因为您的自定义功能:
df['MAD PPGamp'] = df.groupby('Cluster')['PPGamp'].transform(myMAD)
编辑:
您的解决方案无需辅助列即可按列分组
df['Cluster']
:s1 = df.groupby('Cluster')['PPGamp'].transform('median')
s2 = df['PPGamp'].sub(s1).abs()
df['MAD PPGamp'] = s2.groupby(df['Cluster']).transform('median')
关于python-3.x - 在 Pandas `transform()` 中使用自定义函数(中值绝对偏差),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61436389/