微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用pandas聚合Datetime对象到int

我有这样的DataFrame结构

id   time                   number
0        1    1970-01-01 00:00:00    1
1        2    1970-01-02 00:00:00    2
2        1    1970-01-03 00:00:00    2

我想要groupby id并将pd.Datetime dtype的时间聚合为表示时间增量的int,并且我有下面的代码

def interval(a):
    return (np.max(a) - np.min(a)).days

_df = df.groupby(['id'],as_index=False).agg(
        {
            "number": numpy.sum,"time": interval,}
    )

列时间来源为dtype pd.Datetime但聚合数据为int,这导致_df的时间列中的数据从int转换为pd.Datetime,如1970-01-01 00:00:00.000000000

你能告诉我如何获得聚合数据帧的时间列为int的正确结果

解决方法

您可以尝试通过np.timedelta64(1,’D’)将timedelta转换为天数,然后在 astype之前浮动到整数:

def interval(a):
    a = (np.max(a) - np.min(a)) / np.timedelta64(1,'D')
    return a

_df = df.groupby(['id'],as_index=False).agg(
        {
            "number": np.sum,}
    )
_df['time']  = _df['time'].astype(int)  
print _df  

   id  number  time
0   1       3     2
1   2       2     0

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐