2017-06-18 27 views
5

Chciałbym obliczyć średnią i odchylenie standardowe timedelta przez bank z ramki danych z dwiema kolumnami poniżej. Kiedy uruchomić kod (także pokazany poniżej) pojawia się błąd: pandas.core.base.DataError: Brak typów numerycznych agregowaćZnaleźć średnią i odchylenie standardowe obiektu timedelta w pandach df

Moja dataframe:

bank       diff 
    Bank of Japan     0 days 00:00:57.416000 
    Reserve Bank of Australia  0 days 00:00:21.452000 
    Reserve Bank of New Zealand 55 days 12:39:32.269000 
    U.S. Federal Reserve   8 days 13:27:11.387000 

Mój kod:

means = dropped.groupby('bank').mean() 
std = dropped.groupby('bank').std() 

Dziękujemy!

+0

Jak zagregować obiekt 'timedelta'? Uzyskaj dostęp do atrybutów '.days' lub' .seconds', jeśli szukasz agregacji. – Abdou

Odpowiedz

5

Musisz przekonwertować timedelta na jakąś wartość liczbową, np. int64 przez values co jest najbardziej dokładna, ponieważ konwersja do ns jest to, co jest reprezentacja numeryczna timedelta:

dropped['new'] = dropped['diff'].values.astype(np.int64) 

means = dropped.groupby('bank').mean() 
means['new'] = pd.to_timedelta(means['new']) 

std = dropped.groupby('bank').std() 
std['new'] = pd.to_timedelta(std['new']) 

Innym rozwiązaniem jest konwersja wartości seconds przez total_seconds, ale to jest mniej dokładny:

dropped['new'] = dropped['diff'].dt.total_seconds() 

means = dropped.groupby('bank').mean() 
+0

Dziękuję, działało to jak czar - (użyłem pierwszego rozwiązania)! –

Powiązane problemy