一个订单一个订单的分配,i表示第几个订单,分配完一个订单就分配下一个订单,直到所有订单都分配完,因为用的是while语句,要自己进行i=i+1操作
wangxishi
2020-12-09
https://support.microsoft.com/zh-cn/office/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-cn&rs=zh-cn&ad=cn
cda讲师号
2020-12-09
import pandas as pd
data1=pd.read_excel(r"D:\360安全浏览器下载\提取数字.xlsx")
#定一个一个函数传入多个字典字符串返回一个列表
def f1(x):
a=[]
if pd.isna(x)==True:
return x
x=eval("["+x+"]")
for i in x:
b=[i["month"],i["distance"]]
c=b.copy()
a.append(c)
a.sort(key=lambda j:j[0],reverse=False)
return a
f1(data1.iloc[0,1])
#生成里程1临时变量,方便进行后续的处理
data1["里程_temp"]=data1["里程"].map(f1)
#记录每笔订单的最多里程记录次数
data1["times"]=data1["里程_temp"].map(lambda x:len(x) if isinstance(x,list) else x)
data1["times"].value_counts #可以看到最大记录了6次,但是也有2次5次等情况
#生成我们想要的列
def f2(x,time,what):
if isinstance(x,list):
if len(x)>time:
return x[time][what]
else:
return np.nan
else:
return np.nan
data1["日期1"]=data1["里程_temp"].map(lambda x:f2(x,0,0))
data1["里程1"]=data1["里程_temp"].map(lambda x:f2(x,0,1))
data1["日期2"]=data1["里程_temp"].map(lambda x:f2(x,1,0))
data1["里程2"]=data1["里程_temp"].map(lambda x:f2(x,1,1))
data1["日期3"]=data1["里程_temp"].map(lambda x:f2(x,2,0))
data1["里程3"]=data1["里程_temp"].map(lambda x:f2(x,2,1))
data1["日期4"]=data1["里程_temp"].map(lambda x:f2(x,3,0))
data1["里程4"]=data1["里程_temp"].map(lambda x:f2(x,3,1))
data1["日期5"]=data1["里程_temp"].map(lambda x:f2(x,4,0))
data1["里程5"]=data1["里程_temp"].map(lambda x:f2(x,4,1))
data1["日期6"]=data1["里程_temp"].map(lambda x:f2(x,5,0))
data1["里程6"]=data1["里程_temp"].map(lambda x:f2(x,5,1))看看是不是这样

wangxishi
2020-12-07