如何对有条件的timedelta操作进行矢量化?

时间:2016-08-08 07:18:56

标签: python loops pandas

我想避免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条件(即值的范围)将列表添加到数据帧中。

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

2 个答案:

答案 0 :(得分:3)

您可以使用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]

答案 1 :(得分:0)

您可以使用Series.apply

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