【问题标题】:PYTHON Numpy where time conditionPYTHON Numpy where 时间条件
【发布时间】:2017-04-24 23:42:57
【问题描述】:

我有以下目标:我需要比较同一个表中的两个日期列,并根据比较结果创建第三列。我不知道如何比较 np.where 语句中的日期。

这是我当前的代码:

now = datetime.datetime.now() #set the date to compare
delta = datetime.timedelta(days=7) #set delta
time_delta = now+delta #now+7 days

这里是 np.where 语句:

DB['s_date'] = np.where((DB['Start Date']<=time_delta | DB['Start Date'] = (None,"")),DB['Start Date'],RW['date'])

有一个 OR 条件来考虑开始日期列可能为空的可能性

【问题讨论】:

  • 尝试将|更改为or
  • 仍然无法正常工作。我得到以下信息:“无法将 dtyped [datetime64[ns]] 数组与 [bool] 类型的标量进行比较”
  • (DB['Start Date']&lt;=time_delta | DB['Start Date'] = (None,"")) 应该是(DB['Start Date']&lt;=time_delta | DB['Start Date'].isnull() | DB['Start Date'] == "")
  • DB 到底是什么?
  • 另外,RW 是什么?

标签: python pandas numpy where


【解决方案1】:

lambda 是否适合您 Filippo?它逐行查看系列,然后将您选择的函数应用于该行的每个值。函数中返回的任何内容都将用它返回的值填充系列。

def compare(date):
    if date <= time_delta or date == None:
        #return something
    else:
        #return something else
DB['s_date'] = DB.apply(lambda x: compare(x))

编辑:这也可以(感谢 EyuelDK)

DB['s_date'] = DB.apply(compare)

【讨论】:

  • 您可以改用DB['s_date'] = DB.apply(compare) 来简化一点
【解决方案2】:

感谢您的见解。我更新(并针对我的目的进行了调整)代码如下,它可以工作:

now = datetime.datetime.now() #set the date to compare
delta = datetime.timedelta(days=7) #set delta
time_delta = now+delta #now+7 days

DB['Start'] = np.where(((DB['Start Date']<=time_delta) | (DB['Start Date'].isnull()) | (DB['Start Date'] == "")),DB['Start'],DB['Start Date'])

他们的关键是在每个由 | 分隔的条件中添加 ()。否则通过比较两种不同的数据类型会出错。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2018-12-20
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    相关资源
    最近更新 更多