ayd*_*dow 4 python lambda dataframe python-datetime pandas
我有一个DataFrame,它有一个开放时间和一个关闭时间,我试图计算差异,以毫秒为单位.
我的代码目前是这样的
df = df.assign(Latency=lambda d: d.CloseTimeStamp - d.CreationTimeStamp)
df.Latency = df.apply(lambda d: d.Latency.total_seconds() * 1000., axis=1)
Run Code Online (Sandbox Code Playgroud)
但是,我想知道为什么我不能像这样的单行
df = df.assign(Latency=lambda d: (d.CloseTimeStamp - d.CreationTimeStamp).total_seconds() * 1000.)
Run Code Online (Sandbox Code Playgroud)
当我尝试后者时,我得到了 AttributeError: 'Series' object has no attribute 'total_seconds'
总秒数在.dt属性中,所以这应该工作:
df = df.assign(Latency=lambda d: (d.CloseTimeStamp - d.CreationTimeStamp).dt.total_seconds() * 1000.)
Run Code Online (Sandbox Code Playgroud)
话虽如此,不需要lambda函数:
df = df.assign(Latency=(df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.)
Run Code Online (Sandbox Code Playgroud)
要快得多.
关于效率的进一步评论:df.assign()构建一个全新的数据框对象; 如果您打算将此对象重新分配df,则最好df在原地修改:
df['Latency'] = (df.CloseTimeStamp - df.CreationTimeStamp).dt.total_seconds() * 1000.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |