You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为DataFrame新增列:按优先级用日期列计算产品故障时的使用时长

解决方法:按优先级计算产品故障使用时长

嘿,这个需求我之前也碰到过,用Pandas就能轻松实现你的多优先级日期计算逻辑,下面一步步来:

第一步:确保所有日期列是datetime类型

首先得把你的日期列(Incident Date、Install Date、Shipping Date、Build Date)都转换成Pandas的datetime格式,不然减法运算会出问题:

import pandas as pd

# 转换日期列(如果你的数据读进来是字符串的话)
date_cols = ['Incident Date', 'Install Date', 'Shipping Date', 'Build Date']
df[date_cols] = df[date_cols].apply(pd.to_datetime, errors='coerce')

errors='coerce'会把无效的日期转成NaT(缺失日期类型),方便后续处理。

第二步:计算各候选时长列

分别用三种日期组合计算时长:

# 优先使用 Install Date
df['duration_install'] = df['Incident Date'] - df['Install Date']
# 其次使用 Shipping Date
df['duration_shipping'] = df['Incident Date'] - df['Shipping Date']
# 最后使用 Build Date(数据完整)
df['duration_build'] = df['Incident Date'] - df['Build Date']

计算出来的结果是Timedelta类型,会显示类似365 days这样的格式,如果需要转成纯天数的话,可以加.dt.days,比如df['duration_install'] = (df['Incident Date'] - df['Install Date']).dt.days。

第三步:按优先级合并得到最终时长

用combine_first方法按你的优先级规则合并,它会优先保留前面列的非缺失值,缺失的部分用后面的列填充:

df['usage_duration'] = df['duration_install'].combine_first(df['duration_shipping']).combine_first(df['duration_build'])

如果你不想保留中间的三个候选列,可以合并后删掉:

df = df.drop(['duration_install', 'duration_shipping', 'duration_build'], axis=1)

额外提示

  • 如果Incident Date也存在缺失值,你可能需要先过滤掉这些行,或者根据业务逻辑处理,比如标记为缺失。
  • 如果你需要的是小时/分钟级别的时长,可以用Timedelta的其他属性,比如.dt.total_seconds()/3600转成小时。

内容的提问来源于stack exchange,提问作者JordanR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:33:10