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

THM*_*THM 5 python decimal dataframe pandas

我需要在pandas TimeSeries/ DataFrameobject中存储Python十进制类型值.当在TimeSeries/DataFrame上使用"groupby"和"mean"时,Pandas会给我一个错误.以下基于浮点数的代码运行良好:

[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
Run Code Online (Sandbox Code Playgroud)

但是如果使用十进制值而不是浮点数做同样的事情我会得到一个错误:

[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:\Users\TM\Documents\Python\tm.py", line 100, in <module>
print ts.groupby([by('year'), by('month'), by('day')]).mean()
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 293, in mean
return self._cython_agg_general('mean')
File "C:\Python27\lib\site-packages\pandas\core\groupby.py", line 365, in _cython_agg_general
raise GroupByError('No numeric types to aggregate')
pandas.core.groupby.GroupByError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:我刚刚意识到大多数其他功能(最小,最大,中位数等)工作正常但不是我迫切需要的平均功能:-(.

ely*_*ely 11

import numpy as np
ts.groupby([by('year'), by('month'), by('day')]).apply(np.mean)
Run Code Online (Sandbox Code Playgroud)

  • 另外,你真的不需要这里的lambda,只需要输入`np.mean`也可以工作,但我留下lambda来说明当你想要应用的更多通用函数不能工作时你将如何解决这个问题他们的默认方式.`.apply`函数在Pandas中非常强大. (3认同)