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

解决Pandas中行间分钟时间差转小时的格式异常问题

解决时间差分钟转小时格式异常的问题

看起来你遇到的问题根源是数据类型强制转换导致的:你之前的t列被设置为int64(整数类型),当你将浮点结果(比如30/60=0.5)赋值给这个列时,pandas会自动把浮点数强制转为整数,0.5就被向上取整成1了,这就是结果不符合预期的原因。

下面给你几个可行的解决方案:

方案1:创建新列存储小时格式结果(推荐)

避免覆盖原有整数类型的t列,直接新增一列来存储浮点型的小时数:

# 保留原有的分钟级时间差计算(如果需要的话)
df1['t'] = df1['delta'].apply(lambda x: x / np.timedelta64(1,'m')).astype('int64') % (24*60)
# 新增列计算小时格式的时间差
df1['hours_diff'] = df1['t'] / 60

方案2:修改原有列的数据类型后再赋值

如果你一定要覆盖原来的t列,可以先把它的类型改成浮点型,再进行计算:

# 将t列转换为浮点类型
df1['t'] = df1['t'].astype('float64')
# 重新计算小时格式的时间差
df1['t'] = df1['delta'].apply(lambda x: x / np.timedelta64(1,'m')).astype('int64') % (24*60) / 60

方案3:用pandas原生方法简化计算(更高效)

其实不需要用apply,pandas的timedelta类型自带更便捷的转换方法,代码更简洁也更高效:

# 计算行与行的时间差,第一行填充0
df1['delta'] = df1['time_diff'].diff().fillna(pd.Timedelta(seconds=0))
# 直接将时间差转换为小时数(总秒数除以3600)
df1['hours_diff'] = df1['delta'].dt.total_seconds() / 3600

用以上任意一种方法,你都能得到符合预期的结果:比如30分钟对应0.5,75分钟对应1.25,完全匹配你给出的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:44:04