簡體   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