Je voudrais calculer la mean
et le standard deviation
d'une timedelta
par banque à partir d'une dataframe
à deux colonnes comme ci-dessous. Lorsque je lance le code (également illustré ci-dessous), l'erreur ci-dessous apparaît:
pandas.core.base.DataError: No numeric types to aggregate
Mon cadre de données:
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
Mon code:
means = dropped.groupby('bank').mean()
std = dropped.groupby('bank').std()
Vous devez convertir timedelta
en une valeur numérique, par exemple. int64
par values
ce qui est le plus précis, car convertir en ns
est ce qui est la représentation numérique de 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'])
Une autre solution consiste à convertir les valeurs en seconds
avec total_seconds
, mais cela est moins précis:
dropped['new'] = dropped['diff'].dt.total_seconds()
means = dropped.groupby('bank').mean()
Pas besoin de convertir timedelta
avant et en arrière. Numpy et les pandas peuvent le faire de manière transparente avec un temps d'exécution plus rapide. En utilisant votre dropped
DataFrame
:
import numpy as np
grouped = dropped.groupby('bank')['diff']
mean = grouped.apply(lambda x: np.mean(x))
std = grouped.apply(lambda x: np.std(x))