python-3.x - 在 Pandas `transform()` 中使用自定义函数(中值绝对偏差)

标签 python-3.x pandas dataframe pandas-groupby

我有一个 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/

相关文章:

python - Pandas 获取元素直到值发生变化

python - 优化 Python 代码以提高效率

python - Python 3.4 中可以选择迭代器的起点吗?

python - 总结 Python Pandas 中两列(双向)的组合计数

python - 查找两个 pandas 数据帧之间部分字符串匹配的最快方法

python - 根据唯一的列值重复数据帧行 n 次,并为每行重复创建具有不同值的新列

python-3.x - 如何根据列表访问 DataFrame 中的某些列?

python-3.x - UDP 服务器内的 asyncio.sleep 不起作用

python - 为 Pandas 中的每一列获取非零值

python - 如何在 Pandas 中用分组模式替换缺失值?