如何在具有Decimal类型值的pandas TimeSeries上使用mean方法



我需要将Python十进制类型的值存储在pandas TimeSeries/DataFrame对象中。Pandas在TimeSeries/DataFrame上使用"groupby"one_answers"mean"时给了我一个错误。以下基于浮动的代码运行良好:

[0]: by = lambda x: lambda y: getattr(y, x)
[1]: rng = date_range('1/1/2000', periods=40, freq='4h')
[2]: rnd = np.random.randn(len(rng))
[3]: ts = TimeSeries(rnd, index=rng)
[4]: ts.groupby([by('year'), by('month'), by('day')]).mean()
2000  1  1    0.512422
         2    0.447235
         3    0.290151
         4   -0.227240
         5    0.078815
         6    0.396150
         7   -0.507316

但如果使用十进制值而不是浮点值进行同样的操作,我会得到一个错误:

[5]: rnd = [Decimal(x) for x in rnd]       
[6]: ts = TimeSeries(rnd, index=rng, dtype=Decimal)
[7]: ts.groupby([by('year'), by('month'), by('day')]).mean()  #Crash!
Traceback (most recent call last):
File "C:UsersTMDocumentsPythontm.py", line 100, in <module>
print ts.groupby([by('year'), by('month'), by('day')]).mean()
File "C:Python27libsite-packagespandascoregroupby.py", line 293, in mean
return self._cython_agg_general('mean')
File "C:Python27libsite-packagespandascoregroupby.py", line 365, in _cython_agg_general
raise GroupByError('No numeric types to aggregate')
pandas.core.groupby.GroupByError: No numeric types to aggregate

错误消息为"GroupByError('没有要聚合的数字类型')"。是否有机会在包含Decimal值的TimeSeries或DataFrame上使用标准聚合,如sum、mean和quantileon?

为什么它不起作用?如果不可能的话,有机会有同样快速的替代方案吗?

编辑:我刚刚意识到大多数其他函数(最小值、最大值、中值等)都很好用,但不是我迫切需要的平均函数:-(.

import numpy as np
ts.groupby([by('year'), by('month'), by('day')]).apply(np.mean)

最新更新