Python 我的while函数没有返回任何值!我做错了什么
这是个新手 我有一个如下所示的数据帧:Python 我的while函数没有返回任何值!我做错了什么,python,python-3.x,pandas,Python,Python 3.x,Pandas,这是个新手 我有一个如下所示的数据帧: currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08
currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate
m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m1 NaT 2020-03-24 2020-02-14 2020-03-13 2020-03-18
def flag(data):
while data.currentMilestone== 'm1'is True:
if data.SLA_M6 > data.latedeliverydate:
return 'R'
elif (data.SLA_M3 != data.earlypickupdate) & (data.latedeliverydate <= data.SLA_M6):
return 'A'
elif (data.SLA_M3 == data.earlypickupdate) & (data.latedeliverydate >= data.earlypickupdate):
return 'G'
else:
return None
我写过这样的文章:
currentMilestone m2 SLA_M6 latedeliverydate SLA_M3 earlypickupdate
m2 2020-02-21 2020-02-18 2020-03-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m2 2020-02-21 2020-02-18 2020-02-14 2020-02-09 2020-02-08
m1 NaT 2020-03-24 2020-02-14 2020-03-13 2020-03-18
def flag(data):
while data.currentMilestone== 'm1'is True:
if data.SLA_M6 > data.latedeliverydate:
return 'R'
elif (data.SLA_M3 != data.earlypickupdate) & (data.latedeliverydate <= data.SLA_M6):
return 'A'
elif (data.SLA_M3 == data.earlypickupdate) & (data.latedeliverydate >= data.earlypickupdate):
return 'G'
else:
return None
当我运行我的函数时,我没有任何结果。。。我的意思是旗帜不能正常工作。所有行都设置为“无”
这里有什么问题吗?用于此,因为应用
效率很低:
import numpy as np
cond1 = data['currentMilestone'] == 'm1'
condlist = [
(data['SLA_M6'] > data['latedeliverydate']) & cond1,
(data['SLA_M3'] != data['earlypickupdate']) & (data['latedeliverydate'] <= data['SLA_M6']) & cond1,
(data['SLA_M3'] == data['earlypickupdate']) & (data['latedeliverydate'] >= data['earlypickupdate']) & cond1
]
choicelist = ['R', 'A', 'G']
data['flag'] = np.select(condlist, choicelist, default=None)
您不应该在时使用
,因为您总是在每个条件下返回
。您如何调用该函数?返回值不会向数据帧添加列。一般提示:在条件表达式之后不需要为True
。数据['flag']=data.apply(flag,axis=1)如果data.currentMilestone='m1'
在首次调用函数时不为True,则while永远不会运行,您没有显式返回值,因此python会返回None。但是,您可能需要仔细检查您的逻辑和预期输出,因为这些条件的计算结果都不是True
当然,我已经更新了数据,以便最后一行的计算结果为'True'