我有一个类似-
的数据库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 ')
任何想法将不胜感激!
答案 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)