I am trying to fill a column based on condition but something goes wrong.
So I am expecting if it is not 2017 there should be a no.
But yet the years 2019 and 2020 also get filled up with yes.
Does anyone know what went wrong?
JavaScript
x
10
10
1
``
2
dfV['is_vacation'] = np.where((dfV['year'] == 2017) &
3
(dfV['week_nr'] == 26) & (dfV['week_nr'] == 27) & (dfV['week_nr'] == 28)
4
& (dfV['week_nr'] == 29) & (dfV['week_nr'] == 30) &
5
(dfV['week_nr'] == 31) & (dfV['week_nr'] == 32) & (dfV['week_nr'] == 33) & (dfV['week_nr'] == 34)
6
& (dfV['week_nr'] == 35) & (dfV['week_nr'] == 42) & (dfV['week_nr'] == 43) & (dfV['week_nr'] == 44), 'Yes', 'No')
7
``
8
``
9
10
Advertisement
Answer
Use Series.between
instead &
for bitwise AND
, for chain by bitwise OR
use |
:
JavaScript
1
16
16
1
dfV = pd.DataFrame({'year':[2017,2018,2019,2017,2017,2017],
2
'week_nr':[43,30,20,40,30,36]})
3
4
dfV['is_vacation'] = np.where((dfV['year'] == 2017) &
5
(dfV['week_nr'].between(26, 35) |
6
dfV['week_nr'].between(42, 44)),
7
'Yes', 'No')
8
print (dfV)
9
year week_nr is_vacation
10
0 2017 43 Yes
11
1 2018 30 No
12
2 2019 20 No
13
3 2017 40 No
14
4 2017 30 Yes
15
5 2017 36 No
16
Or:
JavaScript
1
5
1
L = list(range(26, 36)) + list(range(42, 45))
2
3
dfV['is_vacation'] = np.where((dfV['year'] == 2017) & dfV['week_nr'].isin(L),
4
'Yes', 'No')
5