[英]Add a Rand to each row using Pandas' Assign and a Lambda Function
[英]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.