我在一个名为df的数据框中有一个名为date1的日期字段和一个名为weekday的平日字段。我试图创建另一个字段,如果工作日是某个值,则添加一年,否则添加一天。出现错误:
ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。
所以我添加了.any(),它可以运行,但是将365天添加到所有值中。
if df['weekday'].any() < 6:
df['date1'] = df['date'] + timedelta(365)
elif df['weekday'].any() == 6:
df['date1'] = df['date'] + timedelta(1)
else:
df['date1'] = datetime.today()
我正在学习python,并在此处对常见问题进行了广泛搜索,因此希望您能获得指导。谢谢
当您将系列与一个元素进行比较时会出现此错误。尝试这种方式-
for i, value in enumerate(df['weekday']):
if value < 6:
df['date1'][i] = df['date'][i] + timedelta(365)
elif value == 6:
df['date1'][i] = df['date'][i] + timedelta(1)
else:
df['date1'][i] = datetime.today()
希望这会对您有所帮助。
不确定我是否理解您的问题,但是您可以尝试以下操作(矢量化):
idxs1 = df['weekday'] < 6
df["date1"][idxs1] = df["date"][idxs1] + timedelta(365)
idxs2 = df["weekday"] == 6
df["date1"][idxs2] = df["date"][idxs2] + timdelta(1)
idxs3 = np.logical_not(np.logical_or(idxs1, idxs2))
df['date1'][idxs3] = datetime.today()
您应该知道的是any()是如何工作的。 any()函数将检查值,并且只要发现至少一个满足条件的元素,就会将其应用于所有值。我的意思是说,当您使用
df['weekday'].any() < 6
已找到至少一个满足此条件的值,因此已更新该数据框中的所有值。因此,您不应为此目的使用any()。