Quite newbie to this !
i have a dataframe that looks like this:
JavaScript
x
7
1
currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate
2
m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08
3
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
4
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
5
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
6
m1 NaT 2020-03-24 2020-02-14 2020-03-13 2020-03-18
7
i have written that looks like this:
JavaScript
1
14
14
1
def flag(data):
2
3
while data.currentMilestone== 'm1'is True:
4
5
if data.SLA_M6 > data.latedeliverydate:
6
return 'R'
7
elif (data.SLA_M3 != data.earlypickupdate) & (data.latedeliverydate <= data.SLA_M6):
8
return 'A'
9
10
elif (data.SLA_M3 == data.earlypickupdate) & (data.latedeliverydate >= data.earlypickupdate):
11
return 'G'
12
else:
13
return None
14
the expected output is :
JavaScript
1
7
1
currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate flag
2
m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08 None
3
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
4
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
5
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
6
m1 NaT 2020-03-24 2020-02-14 2020-03-13 2020-03-18 R
7
When i run my function i dont have any result … I mean the flag is not working properly. All rows are set to None
What wrong here ?
Advertisement
Answer
Use numpy.select
for this since apply
is very inefficient:
JavaScript
1
14
14
1
import numpy as np
2
3
cond1 = data['currentMilestone'] == 'm1'
4
5
condlist = [
6
(data['SLA_M6'] > data['latedeliverydate']) & cond1,
7
(data['SLA_M3'] != data['earlypickupdate']) & (data['latedeliverydate'] <= data['SLA_M6']) & cond1,
8
(data['SLA_M3'] == data['earlypickupdate']) & (data['latedeliverydate'] >= data['earlypickupdate']) & cond1
9
]
10
11
choicelist = ['R', 'A', 'G']
12
13
data['flag'] = np.select(condlist, choicelist, default=None)
14
[out]
JavaScript
1
7
1
currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate flag
2
0 m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08 None
3
1 m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
4
2 m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
5
3 m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08 None
6
4 m1 NaT 2020-03-24 2020-02-14 2020-03-13 2020-03-18 R
7