如何在Python中应用IF和ELSEIF语句?

问题描述 投票:-1回答:3

我在一个名为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,并在此处对常见问题进行了广泛搜索,因此希望您能获得指导。谢谢

python pandas if-statement case-statement
3个回答
1
投票

当您将系列与一个元素进行比较时会出现此错误。尝试这种方式-

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()

希望这会对您有所帮助。


0
投票

不确定我是否理解您的问题,但是您可以尝试以下操作(矢量化):

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()

-1
投票

您应该知道的是any()是如何工作的。 any()函数将检查值,并且只要发现至少一个满足条件的元素,就会将其应用于所有值。我的意思是说,当您使用

     df['weekday'].any() < 6

已找到至少一个满足此条件的值,因此已更新该数据框中的所有值。因此,您不应为此目的使用any()。

© www.soinside.com 2019 - 2024. All rights reserved.