如何计算均值和方差从熊猫DateTime对象?

问题描述 投票:1回答:1

如何计算形式YYYY-MM-DD的Python datetime对象汇总统计(均值和标准差)?我要为具有不同ID的日期时间obejcts不同群体做到这一点。

下面是该数据是这样的:

import datetime as dt

df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
    dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
    dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})

    Date        ID
    2017-09-01  1
    2017-11-01  2
    2017-09-01  3
    2017-11-07  3
    2017-08-01  2
    2017-11-01  1
    2017-12-01  2
    2017-10-01  3
    2017-10-01  2

而且我要的结果,看起来像:

ID_1_mean  ID_1_sd  ID_2_mean   ID_2_sd ...
YYYY-MM-DD int      YYYY-MM-DD  int ...

其中YYYY-MM-DD是从组1和INT的日期的平均是平均在1组,反复对所有的组。

python pandas datetime dataframe summary
1个回答
1
投票

这是一个有点笨拙的解决方法:

  1. 转换datetime.datepandas.Timestamppd.to_datetime()
  2. 转换pandas.Timestamp.astype(int)整数
  3. 计算平均值和这些整数性病
  4. 转换意味着pandas.Timestamp
  5. STD转换到pandas.Timedelta

设定:

df = pd.DataFrame({
'Date': [dt.date(2017,9,1),dt.date(2017,9,21),dt.date(2017,9,14),
    dt.date(2017,11,7),dt.date(2017,8,1),dt.date(2017,12,21),
    dt.date(2017,12,14),dt.date(2017,10,1),dt.date(2017,10,1)],
'ID': [1,2,3,3,2,1,2,3,2],
})

解:

df['Date_int'] = pd.to_datetime(df['Date']).astype(int)
res = df.groupby('ID').agg(['mean', 'std'])
res.columns = ['_'.join(c) for c in res.columns.values]

res['Date_mean'] = pd.to_datetime(res['Date_int_mean'])
res['Date_std'] = pd.to_timedelta(res['Date_int_std'])

res = res[['Date_mean', 'Date_std']]
res

             Date_mean                Date_std
ID                                            
1  2017-10-26 12:00:00 78 days 11:43:56.874291
2  2017-10-01 18:00:00 55 days 15:53:10.401720
3  2017-10-07 16:00:00 27 days 14:38:57.222514
© www.soinside.com 2019 - 2024. All rights reserved.