【问题标题】:Using .apply() in Sframes to manipulate multiple columns of each row在 Sframes 中使用 .apply() 来操作每行的多列
【发布时间】:2016-09-30 17:21:49
【问题描述】:

我有一个包含 Date1 和 Date2 列的 SFrame。

我正在尝试使用.apply() 来查找 Date1 和 Date2 之间的日期差异,但我不知道如何使用另一个参数。

理想情况下是这样的

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

【问题讨论】:

  • 所以您希望天数有所不同?
  • 是的。但尽量避免迭代,而是使用 .apply() 函数。
  • frame['Date1'] - frame['Date2'] 不起作用?
  • 不...它给出的结果我不确定单位是什么...比如 2016 年 9 月 6 日 - 2016 年 5 月 2 日给出了数以万计的数字,即不是几个月或几天......
  • 这只是两个日期之间的秒数。您可以简单地使用apply 方法将其转换为天数:(frame['Date2'] - frame['Date1']).apply(lambda x: round(x/(60*60*24)))

标签: python sframe


【解决方案1】:

您可以通过从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  |
+----------------------------+----------------------------+---------+

【讨论】:

    猜你喜欢
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多