【问题标题】:Unexpected behavior in pandas mad() with groupby()带有 groupby() 的 pandas mad() 中的意外行为
【发布时间】:2021-09-01 19:59:24
【问题描述】:

假设我创建了一个数据框:

In [1]: df = pd.DataFrame({'a':[1,1,1,2,2,2], 'b':[1,2,3,4,5,6]})

如果我对该数据框的分组版本进行大多数统计,它们会按预期出现:

In [2]: df.groupby('a').median()
Out[2]: 
   b
a   
1  2
2  5    

但是当我计算中值绝对偏差(疯狂)时,我得到一个额外的列'a',它全为零:

In [3]: df.groupby('a').mad()
Out[3]: 
   a         b
a             
1  0  0.666667
2  0  0.666667

mad() 函数似乎在普通数据帧上运行良好,只是在分组上运行良好。除非这是一个功能,而不是一个错误,我就是不明白。想法?

【问题讨论】:

  • 可能并不重要,但只是为了澄清,pandas mad() 不是中值绝对偏差,而是平均绝对偏差。来自docs

标签: python pandas


【解决方案1】:

这是一个错误,计划在 0.14 中修复(即将发布),请参阅 here。错误是非 cythonized 例程调用 apply 而不是 ``agg` 有效。

解决方法是:

df.groupby('a').agg(lambda x: x.mad())

【讨论】:

  • 如果我想将它与 df.groupby(['a','b']).agg([mean,std,mad]) 一起使用怎么办? mean 和 std 返回但 mad 返回错误.. 截至今天,pandas 的版本是 0.16.0
【解决方案2】:

在 pandas 中,MAD 是平均绝对偏差,而不是中位数 AD!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2015-07-03
    • 2020-01-21
    • 1970-01-01
    • 2018-03-03
    • 2013-12-07
    • 2016-03-22
    相关资源
    最近更新 更多