在Sframes中使用.apply()来操纵每一行的多列

问题描述:

我有一个带Date1和Date2列的SFrame。在Sframes中使用.apply()来操纵每一行的多列

我想使用.apply()找到Date1和Date2之间的datediff,但我无法弄清楚如何使用另一个参数。

理想像

frame['new_col'] = frame['Date1'].apply(lambda x: datediff(x,frame('Date2'))) 
+0

所以你期待在天有所不同? – sb0709

+0

是的。但是试图避免迭代,而是使用.apply()函数。 – javsckc

+0

'frame ['Date1'] - frame ['Date2']'不起作用? – Abdou

您可以直接从frame['Date2']只是减去frame['Date1']采取Date2列和那些在Date1的日期之间的差值。也就是说,由于某种原因,返回秒的两个日期之间的数(仅适用于Python的datetime对象测试),它可以转换成数与简单的算术天的:

from sframe import SFrame 
from datetime import datetime, timedelta 

mydict = {'Date1':[datetime.now(), datetime.now()+timedelta(2)], 
      'Date2':[datetime.now()+timedelta(10), datetime.now()+timedelta(17)]} 
frame = SFrame(mydict) 
frame['new_col'] = (frame['Date2'] - frame['Date1']).apply(lambda x: x//(60*60*24)) 

输出:

+----------------------------+----------------------------+---------+ 
|   Date1   |   Date2   | new_col | 
+----------------------------+----------------------------+---------+ 
| 2016-10-02 21:12:14.712556 | 2016-10-12 21:12:14.712574 | 10.0 | 
| 2016-10-04 21:12:14.712567 | 2016-10-19 21:12:14.712576 | 15.0 | 
+----------------------------+----------------------------+---------+ 
+0

谢谢!我知道这听起来很愚蠢,但这并没有出现在我身上...... – javsckc