簡體   English   中英

查找pandas df中timedelta對象的均值和標准差

[英]Finding the mean and standard deviation of a timedelta object in pandas df

我想從下面顯示的兩列dataframe timedelta計算出時間點的時間meanstandard deviation 當我運行代碼(也顯示如下)時,我得到以下錯誤:

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

您需要將timedelta轉換為某個數值,例如int64values是最准確的values ,因為轉換為nstimedelta的數字表示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'])

另一個解決方案是使用total_seconds將值轉換為seconds ,但這不太准確:

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

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

無需來回轉換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))

Pandas mean()和其他聚合方法支持numeric_only=False參數。

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

在此處找到: Python DataFrame中Timedelta值的聚合

我建議傳遞numeric_only=False參數mean由亞歷山大Usikov提到-這個工程的熊貓版0.20+。

如果您使用的是舊版本,則以下內容有效:

import pandas pd

df = pd.DataFrame({
    'td': pd.Series([pd.Timedelta(days=i) for i in range(5)]),
    'group': ['a', 'a', 'a', 'b', 'b']
})

(
    df
    .astype({'td': int})         # convert timedelta to integer (nanoseconds)
    .groupby('group')
    .mean()
    .astype({'td': 'timedelta64[ns]'})
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM