在Pandasd中求timedelta对象的平均值和标准差

2024-05-23 02:57:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算一个timedeltameanstandard deviation的一个timedelta银行从一个dataframe和两列如下。当我运行代码(如下所示)时,会出现以下错误:

pandas.core.base.DataError: No numeric types to aggregate

我的数据帧:

   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

我的代码:

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

Tags: of代码dataframe银行meandaysstandardtimedelta
3条回答

您需要将timedelta转换成一些数值,例如int64通过values转换成int64最准确的值,因为转换成nstimedelta的数值表示:

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'])

另一种解决方案是通过^{}将值转换为seconds,但这样做不太准确:

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

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

无需来回转换timedelta。Numpy和pandas可以以更快的运行时间无缝地为您完成这项任务。使用droppedDataFrame

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))

Pandasmean()和其他聚合方法支持numeric_only=False参数。

dropped.groupby('bank').mean(numeric_only=False)

在这里找到:Aggregations for Timedelta values in the Python DataFrame

相关问题 更多 >

    热门问题