【问题标题】:How do I vectorize a conditional timedelta operation?如何矢量化条件 timedelta 操作?
【发布时间】:2016-08-08 15:41:11
【问题描述】:

我想避免 Python pandas 中的 for 循环,但由于缺乏曝光,我没有做到。我想通过向现有列添加一些信息来派生一个新列。

我的场景:

for each in data['days']:
    if each<100000:
        clsdate.append(datetime.now()+ relativedelta(days=each))
    else:
        clsdate.append(datetime.now())

data['clsdate'] = clsdate

data['days'] 包含一个 int 数字。在这里,我正在迭代整个列并进行总和

今天的日期 + 天数 = 截止日期

并将值附加到列表中。然后根据 if 条件(即值的范围)将列表添加到数据框中。

如何避免这种循环并一次性添加。

【问题讨论】:

  • 什么是prediction
  • datetime.now(),编辑了我的问题。

标签: python loops pandas


【解决方案1】:

您可以使用 pandas 的日期时间函数:

df = pd.DataFrame()
df['days'] = [1, 3, 2, 4]
pd.to_datetime('now') + pd.to_timedelta(df['days'], unit='days')
Out: 
0   2016-08-09 07:25:22
1   2016-08-11 07:25:22
2   2016-08-10 07:25:22
3   2016-08-12 07:25:22
Name: days, dtype: datetime64[ns]

【讨论】:

  • 更新了我的问题。立即检查。
【解决方案2】:

你可以使用Series.apply

data['clsdate'] = data['days'].apply(lambda x: datetime.now() + relativedelta(days=x))

【讨论】:

  • 更新了我的问题。我现在有一张支票。
猜你喜欢
  • 1970-01-01
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2016-11-16
  • 2019-09-14
  • 1970-01-01
相关资源
最近更新 更多