groupby对象熊猫的绝对值的平均值

Posted

技术标签:

【中文标题】groupby对象熊猫的绝对值的平均值【英文标题】:mean of absolute value of groupby object pandas 【发布时间】:2016-07-05 00:11:30 【问题描述】:

我想计算一个分组对象的绝对值的平均值。

grouped = df.groupby([pd.TimeGrouper(3MS)])

dct['x'] = grouped['profit'].agg('mean') / grouped['cost'].abs().agg('mean')

但是,上面的代码会导致错误。我已经尝试了上述代码的各种变体,但到目前为止都导致错误。

必须有一个简单的方法来做到这一点。

更新:

这是通过 vi pd.TimeGrouper(3MS) 分组的数据帧。我想取列成本 1 的绝对值,然后计算平均值。

            cost1  cost2  cost3  cost4  
date                                                                       
2016-03-31       -490.60        -118.10         -344.87           -91.44   
2016-04-30       -188.74         -55.99         -259.23           -75.16   
2016-05-31       -158.62         -43.58         -176.37           -21.98 

我试图做grouped['cost1'].abs().mean(),但我得到了:

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in __getattr__(self, attr)
    493             return self[attr]
    494         if hasattr(self.obj, attr):
--> 495             return self._make_wrapper(attr)
    496 
    497         raise AttributeError("%r object has no attribute %r" %

/Users/User1/anaconda/lib/python2.7/site-packages/pandas/core/groupby.pyc in _make_wrapper(self, name)
    507                    "using the 'apply' method".format(kind, name,
    508                                                      type(self).__name__))
--> 509             raise AttributeError(msg)
    510 
    511         # need to setup the selection

AttributeError: ("Cannot access callable attribute 'abs' of 'SeriesGroupBy' objects, try using the 'apply' method", u'occurred at index 0')

【问题讨论】:

您能发布一些示例数据吗?您的错误是什么?否则我们猜测这里出了什么问题。 我添加了您建议的信息。感谢您提供帮助。 【参考方案1】:

根据您的更新,我认为您正在寻找对组的绝对值采取的一种均值。

使用grouped.apply(abs).mean() 会将abs 函数应用于您的组中的值(cost1 等),而mean 将为您提供无论您的分组变量是什么的平均值。

您也可以在分组前应用abs函数,然后直接使用mean函数。

【讨论】:

按照这里的建议,您可以通过 .abs() 转换所有值,然后将 .mean() 添加到您按功能应用分组的行的末尾【参考方案2】:

您可能会收到错误,因为您不能在 Sereis 对象上使用 .agg

您没有发布您的分组对象,所以我不知道是否还有其他问题,但您应该尝试这种方式。我认为这应该可行:

dct['x'] = grouped['profit'].mean() / grouped['cost'].abs().mean()

【讨论】:

谢谢乔的回复。我刚刚在我的帖子中添加了更多信息。

以上是关于groupby对象熊猫的绝对值的平均值的主要内容,如果未能解决你的问题,请参考以下文章

熊猫如何使用 groupby 将 NaN 值替换为平均值 [重复]

忽略熊猫 groupby 组中的 NaN 的标准错误

熊猫:分组,过滤行,获取平均值

熊猫通过该类别的平均值填充空值(使用循环?)

计算 MAD(平均绝对偏差) GroupBy Pandas

如何创建不使用熊猫的个人账户的平均每月,季度提款金额的新列?