wangxishi

2020-12-07   阅读量: 2126

Python数据分析师

python提取数字并排序

想把”里程"列日期和数字提取出来,并按照日期横向排序,一个日期对应一个历程

提取数字.xlsx

image.png

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
63.1579 1 3 关注作者 收藏

评论(3)

ermutuxia
2020-12-07
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.0000 0 0 回复
wangxishi
2020-12-07

想要的效果:

image.png

133.3258 1 0 回复
wangxishi
2020-12-07
1200.0000 1 0 回复

推荐课程