Home > other >  Why does my for loop combined with if-statement provide a wrong output?
Why does my for loop combined with if-statement provide a wrong output?

Time:06-09

I have a dataframe called df_dummy with 3 columns: Days, Vacations_per_day and day_of_week. And I have a list called legal_days. I want to see if values from df_dummy['Days'] are found in the list legal_days and if found, change the value of Vacations_per_day column to 4 for the specific row.

The list contains the following dates:

2022-08-15

2022-11-30

2022-12-01

2022-12-26

I tried this:

for index,i in enumerate(df_dummy['Days']):
    if i in legal_days:
        df_dummy['Vacations_per_day'][index] = 4
    else:
        pass

And the outcome is this:

        Days  Vacations_per_day day_of_week
2   2022-06-13                0.0      Monday
3   2022-06-14                0.0     Tuesday
4   2022-06-15                0.0   Wednesday
5   2022-06-16                1.0    Thursday
6   2022-06-17                1.0      Friday
7   2022-06-20                0.0      Monday
8   2022-06-21                0.0     Tuesday
9   2022-06-22                0.0   Wednesday
10  2022-06-23                0.0    Thursday
11  2022-06-24                0.0      Friday
12  2022-06-27                0.0      Monday
13  2022-06-28                0.0     Tuesday
14  2022-06-29                1.0   Wednesday
15  2022-06-30                1.0    Thursday
16  2022-07-01                1.0      Friday
17  2022-07-04                1.0      Monday
18  2022-07-05                1.0     Tuesday
19  2022-07-06                1.0   Wednesday
20  2022-07-07                0.0    Thursday
21  2022-07-08                1.0      Friday
22  2022-07-11                1.0      Monday
23  2022-07-12                1.0     Tuesday
24  2022-07-13                1.0   Wednesday
25  2022-07-14                1.0    Thursday
26  2022-07-15                1.0      Friday
27  2022-07-18                0.0      Monday
28  2022-07-19                0.0     Tuesday
29  2022-07-20                0.0   Wednesday
30  2022-07-21                0.0    Thursday
31  2022-07-22                0.0      Friday
32  2022-07-25                1.0      Monday
33  2022-07-26                1.0     Tuesday
34  2022-07-27                1.0   Wednesday
35  2022-07-28                1.0    Thursday
36  2022-07-29                1.0      Friday
37  2022-08-01                1.0      Monday
38  2022-08-02                1.0     Tuesday
39  2022-08-03                1.0   Wednesday
40  2022-08-04                1.0    Thursday
41  2022-08-05                1.0      Friday
42  2022-08-08                0.0      Monday
43  2022-08-09                0.0     Tuesday
44  2022-08-10                0.0   Wednesday
45  2022-08-11                4.0    Thursday
46  2022-08-12                0.0      Friday
47  2022-08-15                0.0      Monday

Instead of changing the value of the row with the date 2022-08-15 it changes the row with the date of 2022-08-11. Could anyone help me with this?

CodePudding user response:

Looking at your code, I don't see how this would occur. However, your solution seems to be outside the normal use-case for modifying a pandas dataframe. You could accomplish all of this with loc and isin:

df_dummy.loc[df_dummy['Days'].isin(legal_days), 'Vacations_per_day'] = 4

This code works by looking up all the rows in your dataframe that have a value for Days in the legal_days list and then sets the associated value for the Vacations_per_day column to 4.

  • Related