Python pandas如何给列中为0的数值加1并转换时间差为整数
灾害持续天数统计问题解决方法
首先修正原有代码的一处逻辑错误:原代码计算时长时写反了起止日期顺序,会得到负的时间差,需调整为结束日期减去开始日期。
两个问题可通过修改Disaster_Length列的生成逻辑一次性解决,也可单独处理:
合并解决代码
替换掉原有创建Disaster_Length列的代码即可:
df_time['Disaster_Length'] = (df_time.End_Date_A - df_time.Start_Date_A).dt.days + 1
逻辑说明
- 通过
.dt.days属性提取时间差的天数字段,直接将timedelta类型转换为可参与计算的整数类型,解决B问题 - 末尾统一加1,所有起止同日的0差值会自动变为1,跨天的统计也符合实际计数逻辑(如1日到2日时间差为1天,加1后得到2天,和实际持续天数一致),解决A问题
单独处理方案
如果需要单独处理0值条目,可使用如下代码:
# 先将时间差转换为整数类型 df_time['Disaster_Length'] = (df_time.End_Date_A - df_time.Start_Date_A).dt.days # 再将值为0的条目统一加1 df_time.loc[df_time['Disaster_Length'] == 0, 'Disaster_Length'] = 1
内容的提问来源于stack exchange,提问作者JamesArthur
相关产品推荐
相关产品推荐

