Pandas分配Lambda函数

2024-10-03 04:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它有一个打开时间和一个关闭时间,我正在试图计算以毫秒为单位的差异。在

我的代码是这样的

df = df.assign(Latency=lambda d: d.CloseTimeStamp - d.CreationTimeStamp)
df.Latency = df.apply(lambda d: d.Latency.total_seconds() * 1000., axis=1)

但是,我想知道为什么我不能这样做

^{pr2}$

当我尝试后者时,我得到AttributeError: 'Series' object has no attribute 'total_seconds'


Tags: 数据lambda代码df时间单位差异total
2条回答

{{cd2>需要使用

df = df.assign(Latency=lambda d: (d.CloseTimeStamp -  d.CreationTimeStamp).dt.total_seconds() * 1000.)

无λ溶液:

^{pr2}$

…和不含assign的溶液:

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

Total seconds在.dt属性内,因此应该可以这样做:

df = df.assign(Latency=lambda d: (d.CloseTimeStamp - d.CreationTimeStamp).dt.total_seconds() * 1000.)

尽管如此,不需要lambda函数:

^{pr2}$

速度快得多。在

关于效率的进一步说明:df.assign()构建了一个全新的dataframe对象;如果您打算将此对象重新分配给df,那么最好在适当的地方修改df

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

相关问题 更多 >