根据条件以及现有的日期列和时间增量列创建新的日期列

时间:2019-12-12 22:57:59

标签: python pandas dataframe date conditional-statements

我有一个类似-

的数据库
date                  Add
21-Dec-19       1-Month
13-Nov-19      3-Months

我要基于以下条件创建一个新列“ New”:如果日期小于指定的日期,则应添加add列隐含的天数(以timedelta为单位)。

我正在使用的代码是-

df['date'] = pd.to_datetime(df['date'])
df['add'] = df['add'].mapp({'1-Month': np.timedelta64(30,'D'), '3-Months': np.timedelta64 (90,'D')})
def new(row):
   if df['date'] < pd.to_datetime('12/15/2019'):
      val == df['date'] + df['add']
   else:
      val == df['date']
return val

df.apply(lambda row:new(row), axis=1)

我收到以下错误

  

('系列的真值不明确。请使用a.empty,a.bool(),a.item(),a.any()或a.all()。','出现在索引0 ')

任何想法将不胜感激!

1 个答案:

答案 0 :(得分:1)

您的代码有几个问题:

  • 您正在使用row定义函数,而正在使用df。这意味着在对您的if/else语句进行比较时,该函数不知道如何正确评估条件。如果所有值都小于传递的值,我是否返回True?如果有任何值小于?这就是为什么它返回歧义错误。
  • 在定义要使用val的{​​{1}}时,只需使用一个return符号,因为2会将=与一个值进行比较,并且将返回错误,因为从未定义val
  • 在这种情况下,使用val时不需要使用apply,调用该函数就足够了。

这应该对您有用:

lambda

输出:

import pandas as pd  
import numpy as np
data = {'date':['21-Dec-19','13-Nov-19'],'add':['1-Month','3-Months']}  
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])
df['add'] = df['add'].map({'1-Month': np.timedelta64(30,'D'), '3-Months': np.timedelta64 (90,'D')})
def new(row):
    if row['date'] < pd.to_datetime('12/15/2019'):
        val = row['date'] + row['add']
    else:
        val = row['date']
    return val

df['new'] = df.apply(new,axis=1)
print(df)