wangxishi

2020-11-05   阅读量: 7879

Python数据分析师

​python如何实现根据条件计算日期相差天数

想实现如果标识列为‘推迟’的话,则生成‘天数’列里面天数列用固定日期‘2020-10-31’减去time列的日期生成的天数再加1天的天数差,否则天数列的值为0,请问如何实现

image.png

新建 Microsoft Excel 工作表 (3).xlsx


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

评论(13)

ermutuxia
2020-11-06

不用客气

0.0000 0 0 回复
ermutuxia
2020-11-06

(pd.Timestamp("2020-10-31")-x["time"])两个timestamp对象相减是一个时间差对象也就是timedelta对象

0.0000 0 0 回复
wangxishi
2020-11-06

厉害!谢谢!

0.0000 0 0 回复
ermutuxia
2020-11-06

时间差变量.components.days 是把一个时间差变量里面的元素里面的天数调取出来

0.1812 1 0 回复
wangxishi
2020-11-06

data["计算列1"]=data.apply(lambda x: (pd.Timestamp("2020-10-31")-x["time"]).components.days+1 if x["标识"]=="推迟" else 0,axis=1)这句里面的components.days是什么意思

0.0000 0 0 回复
ermutuxia
2020-11-06

我生成的这一列本来就是整数类型的数字呀


image.png

0.0000 0 0 回复
wangxishi
2020-11-06

data["计算列1"]=data.apply(lambda x: (pd.Timestamp("2020-10-31")-x["time"]).components.days+1 if x["标识"]=="推迟" else 0,axis=1)这句里面的components.days是什么意思

0.0000 0 0 回复
ermutuxia
2020-11-06

import pandas as pd

data=pd.read_excel("D:\\360安全浏览器下载\\1604563522_368980.xlsx")


data["计算列1"]=data.apply(lambda x: (pd.Timestamp("2020-10-31")-x["time"]).components.days+1 if x["标识"]=="推迟" else 0,axis=1)


image.png

image.png

0.1812 1 0 回复
wangxishi
2020-11-05

这个天数结果我可以转化成数字吗

0.0000 0 0 回复
Sasyo
2020-11-05

Timedelta.days 返回timedelta有多少整天,不包含小时和分钟,结合apply对对应列进行操作


df['天数_py'] = df['天数_py'].apply(lambda x: x.days)


35.2538 1 0 回复
Sasyo
2020-11-05

算出来的列类型是pd.Timedelta,实际上可以视为时间戳,可以通过其他方式转换为数值

import pandas as pd
import datetime
delay_time = datetime.datetime.strptime('2020-10-31', '%Y-%m-%d')
df =pd.read_excel("C:\\Users\\Administrator\\Downloads\\1604563522_368980.xlsx")
df['time'] = pd.to_datetime(df['time'], unit='d')
df.loc[df['标识']=='推迟','天数_py'] =  delay_time + datetime.timedelta(days=1) - df.loc[df['标识']=='推迟','time'] 
df.loc[df['标识']!='推迟','天数_py'] = pd.Timedelta(seconds=0)


26.0724 1 0 回复
wangxishi
2020-11-05

这个天数结果如何转化成数字呢,我其实就想要相差天数的数字

0.0000 0 0 回复
Sasyo
2020-11-05

image.png补个图

0.0000 0 0 回复
wangxishi
2020-11-05

想用python实现

0.0000 0 0 回复
Sasyo
2020-11-05

使用excel的话,在C1输入 =IF(B2="推迟",44135-A2+1,0),用py的话源是csv导入到Dataframe吗?

26.0724 1 0 回复
wangxishi
2020-11-05

想用python实现,对,导入是Dataframe

0.0000 0 0 回复
Sasyo
2020-11-05
问题已解决,谢谢!
0.0000 0 0 回复

推荐课程