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))



看看是不是这样

image.png


0 0 0

wangxishi

2020-12-07

python提取数字并排序

image.png

1 0 0

蒋丽宁

2020-12-07

cart树gini系数问题

image.png

1 0 1

蒋丽宁

2020-12-07

cart树gini系数问题