计算规则:
-
起步费用:判断是否满足是否属于起步公里,后面的算法会对不同的时间点的起步也设置不同的起步费用价格
-
里程费用:(实际里程公里-起步公里)*不同起步时间的里程单价
-
时长费用: (计费时长-起步时间)*不同起步时间的时间单价
-
超路程费用:(实际里程公里-超路程公里)*超路程的公里费用
-
总费用=起步费用+里程费用+时长费用+超路程费用
def calculate_user_id_before(city,order_type,models,ctime,Beyond_km,billing_time):
for index,row in df_user_id_before.iterrows():
if row['城市'] == city and row['起点时间'] <= ctime and row['终点时间'] >= ctime and row["订单类型"]==order_type and row['用车类型']==models:
if Beyond_km<row['起步公里'] and billing_time<row['起步时间']:
return row["起步费用"]
elif Beyond_km<row["起步公里"] and billing_time>row['起步时间']:
return (billing_time-row["起步时间"])*row["时长单价"]+row["起步费"]
elif Beyond_km>row["起步公里"] and billing_time<row['起步时间']:
return (Beyond_km-row["起步公里"])*row["里程单价"]+row["起步费"]
elif Beyond_km>row["起步公里"] and Beyond_km<row["预估临界公里"] and billing_time>row['起步时间']:
return (billing_time-row["起步时间"])*row["时长单价"]+(Beyond_km-row["起步公里"])*row["里程单价"]+row["起步费"]
elif Beyond_km>row["预估临界公里"] and billing_time>row['起步时间']:
return (Beyond_km-row['预估临界公里数'])*row["超过临界里程单价"]+(billing_time-row["起步时间"])*row["时长单价"]+\
(Beyond_km-row["起步公里"])*row["里程单价"]+row["起步费"]
else:
return "基础数据有可能错误"
df['改乘客原价格'] = df.apply(lambda x: calculate_user_id_before(x['城市'], x['订单类型'],x['呼叫车级'],x['time'],x['实际公里(公里)'],x['计费时长']), axis=1)