我有一个DataFrame,它有一个开放时间和一个关闭时间,我试图计算差异,以毫秒为单位.
我的代码目前是这样的
df = df.assign(Latency=lambda d: d.CloseTimeStamp - d.CreationTimeStamp)
df.Latency = df.apply(lambda d: d.Latency.total_seconds() * 1000., axis=1)
但是,我想知道为什么我不能像这样的单行
df = df.assign(Latency=lambda d: (d.CloseTimeStamp - d.CreationTimeStamp).total_seconds() * 1000.)
当我尝试后者时,我得到了AttributeError:’Series’对象没有属性’total_seconds’
解决方法:
总秒数在.dt属性中,所以这应该工作:
df = df.assign(Latency=lambda d: (d.CloseTimeStamp - d.CreationTimeStamp).dt.total_seconds() * 1000.)
话虽如此,不需要lambda函数:
df = df.assign(Latency=(df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.)
要快得多.
关于效率的进一步评论:df.assign()构建一个全新的数据框对象;如果你打算将这个对象重新分配到df,你最好在原地修改df:
df['Latency'] = (df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。