Gra*_*ich 13 python datetime mean timedelta pandas
我想从下面显示的两列中计算一个mean
和standard deviation
一个timedelta
银行dataframe
.当我运行代码(也显示如下)时,我得到以下错误:
pandas.core.base.DataError: No numeric types to aggregate
Run Code Online (Sandbox Code Playgroud)
我的数据帧:
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
Run Code Online (Sandbox Code Playgroud)
我的代码:
means = dropped.groupby('bank').mean()
std = dropped.groupby('bank').std()
Run Code Online (Sandbox Code Playgroud)
小智 19
Pandasmean()
和其他聚合方法支持numeric_only=False
参数。
dropped.groupby('bank').mean(numeric_only=False)
Run Code Online (Sandbox Code Playgroud)
在这里找到:Python DataFrame 中 Timedelta 值的聚合
jez*_*ael 13
您需要转换timedelta
为某个数值,例如int64
通过values
最准确的值,因为转换ns
为以下数字表示的数字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'])
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是值转换seconds
的total_seconds
,但是这是不准确的:
dropped['new'] = dropped['diff'].dt.total_seconds()
means = dropped.groupby('bank').mean()
Run Code Online (Sandbox Code Playgroud)
无需timedelta
来回转换。Numpy和Pandas可以更快地为您无缝完成此操作。使用您的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))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6842 次 |
最近记录: |