繁体   English   中英

Pandas分配Lambda函数

[英]Pandas Assign Lambda Function

我有一个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' object has no attribute '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.assign()对象; 如果你打算将这个对象重新分配到df ,你最好在原地修改df

df['Latency'] = (df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.

需要.dt访问器,因为使用datetime Series ,如果DatetimeIndex ,则省略.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.)

...和没有assign解决方案:

df['Latency'] = (df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM