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
访问器,因为如果 DatetimeIndex
:
使用 datetime Series
,.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.
总秒数在 .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.
我有一个具有打开时间和关闭时间的 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
访问器,因为如果 DatetimeIndex
:
datetime Series
,.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.
总秒数在 .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.