2012-07-12 11 views
5

Python ondalık türü değerlerini pandalar TimeSeries/DataFrame nesnesinde depolamam gerekir. Pandalar, TimeSeries/DataFrame'de "groupby" ve "mean" kullanırken bana hata veriyor.Ondalık tip değerleri olan bir pandada TimeSeries'te ortalama yöntemi nasıl kullanırsınız?

[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 

Ama yüzen yerine aynı kullanılarak ondalık değerleri yaparsam bir hata alıyorum: yüzen dayalı aşağıdaki kod iyi çalışıyor

[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 

hata mesajı "GroupByError ('Hayır sayısal türleri olduğunu birleştirmek için '). TimeSeries veya Ondalık değerleri içeren DataFrame'de toplam, ortalama ve kuantum gibi standart toplamaları kullanma şansı var mıdır?

Neden çalışmıyor ve mümkün değilse, aynı derecede hızlı bir alternatife sahip olma şansı var mı?

DÜZENLEME: Sadece diğer fonksiyonlar (min, maks, medyan, vs.) en i umutsuzca :-(gerek ince ama ortalama işlevi çalışmak olduğunu fark

+1

değilim. emin, ama aynı zamanda son zamanlarda bu konuya koştu.Ben sadece ondalık() değerlerini floatlar ve sonra kayan değerler ile veri çerçevesini oluştururken sona erdi. – reptilicus

cevap

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

Bu işe yaramaz! Teşekkürler EMS! – THM

+0

@ThomasM da çok yardımcı olmak için kullanıcıları teşvik cevaplar vermelisiniz (cevabın solundaki sayının yukarısındaki yukarı oka tıklayarak) Eğer bir cevap gerçekten sorununuzu çözdüyse, bunu da kabul etmelisiniz.Bir soru almak için, aşağıdaki onay işaretini tıklamanız gerekmektedir. sayı – kay

+3

Ayrıca, burada gerçekten lambdaya ihtiyacınız yok, sadece np.mean'ı beslemek de işe yarayacaktı, ama uygulamak istediğiniz daha genel işlevler çalışmadığında bunu nasıl çözeceğinizi göstermek için lambdayı bıraktım. varsayılan yollarla. Panda'larda '.apply' işlevi çok güçlüdür. – ely