如何计算timedelta列的平均值并去除结果中的'0 days'?
解决timedelta列去'0 days'且保留计算能力的问题
核心要点
要兼顾干净的时分秒显示和数值计算能力,绝对不能把列转成纯字符串——必须保留timedelta64[ns]类型,只在显示层面做格式化。
具体操作
1. 生成格式化显示列
假设你的DataFrame是df,目标列叫Tempo Formatado,用dt.strftime直接提取时分秒:
# 新增一列用于展示,原列保留用于计算 df['Tempo Exibicao'] = df['Tempo Formatado'].dt.strftime('%H:%M:%S')
得到的Tempo Exibicao列就是你要的格式:
0 00:27:00
1 01:22:00
2 00:52:00
3 01:04:00
4 00:07:00
2. 计算平均值
直接用原timedelta列计算,再格式化结果:
# 计算平均时长 media = df['Tempo Formatado'].mean() # 转成分钟精度后格式化 media_formatada = media.round('min').dt.strftime('%H:%M').iloc[0]
输出结果就是00:46,和案例一致。
可选:直接修改显示格式(不新增列)
如果不想多一列,也可以临时修改显示格式,但注意这样会把列转成字符串,后续计算要转回来:
# 临时转成格式化字符串显示 df['Tempo Formatado'] = df['Tempo Formatado'].apply(lambda x: x.strftime('%H:%M:%S')) # 后续需要计算时转回timedelta df['Tempo Formatado'] = pd.to_timedelta(df['Tempo Formatado'])
注意事项
- 始终保留原始的
timedelta64[ns]列,避免丢失计算能力 - 如果你的数据存在超过1天的时长,可以把格式化字符串改成
'%H:%M:%S'(自动忽略天数,只显示累计小时)或者'%d days %H:%M:%S'(保留天数)
内容的提问来源于stack exchange,提问作者alanandrade01
相关产品推荐
相关产品推荐

