代码之家  ›  专栏  ›  技术社区  ›  JAG2024

如何计算熊猫日期时间对象的均值和方差?

  •  1
  • JAG2024  · 技术社区  · 7 年前

    如何以YYYY-MM-DD格式计算python datetime对象的摘要统计信息(平均值和标准偏差)?我想为具有不同ID的不同组datetime obejct执行此操作。

    数据如下:

    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组中的平均值,对所有组重复。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Peter Leimbigler    7 年前

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

    1. 转换 datetime.date pandas.Timestamp 具有 pd.to_datetime()
    2. 转换 熊猫。时间戳 用整数表示 .astype(int)
    3. 计算这些整数的平均值和std
    4. 均值转换为 熊猫。时间戳
    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