Как использовать метод среднего значения для временных рядов pandas со значениями типа Decimal?

Мне нужно хранить значения десятичного типа Python в объекте pandas TimeSeries/DataFrame. Pandas выдает мне ошибку при использовании «groupby» и «mean» в TimeSeries/DataFrame. Следующий код, основанный на числах с плавающей запятой, работает хорошо:

[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:\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

Сообщение об ошибке: «GroupByError («Нет числовых типов для агрегирования» )». Есть ли возможность использовать стандартные агрегации, такие как сумма, среднее значение и квантилеон, в TimeSeries или DataFrame, содержащих десятичные значения?

Почему это не работает и есть ли шанс иметь столь же быструю альтернативу, если это невозможно?

РЕДАКТИРОВАТЬ :Я только что понял, что большинство других функций (min, max, median и т. д. )работают нормально, но не средняя функция, в которой я отчаянно нуждаюсь :-(.

5
задан piRSquared 4 January 2017 в 23:57
поделиться