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

Python中datetime.time对象按自定义规则求和的实现方案问询

解决带条件的时间调整求和问题

我明白你现在的困扰——datetime.time对象确实没法直接做算术运算,还要处理那些特殊的时间规则和讨厌的缺失值(NaN)。咱们换个思路,把所有时间转换成总分钟数来处理,这样加减、条件判断、求和都能轻松搞定!

完整解决方案代码

import pandas as pd

# 读取Excel文件
df = pd.read_excel('test.xlsx')

# 第一步:把Duration列的时间转成总分钟数,同时处理NaN值(转为0分钟)
df['total_minutes'] = df['Duration'].apply(lambda x: 
    (x.hour * 60 + x.minute) if pd.notna(x) else 0
)

# 第二步:定义时间调整规则函数
def adjust_minutes(minutes):
    eight_oclock = 8 * 60       # 8:00对应的总分钟数
    eight_fifteen = eight_oclock + 15  # 8:15对应的总分钟数
    nine_oclock = 9 * 60        # 9:00对应的总分钟数
    
    if eight_oclock <= minutes < eight_fifteen:
        # 8:00-8:15之间,统一按8:00(480分钟)计算
        return eight_oclock
    elif eight_fifteen <= minutes <= nine_oclock:
        # 8:15-9:00之间,时间减去15分钟
        return minutes - 15
    else:
        # 早于8:00或晚于9:00,保持原时间的总分钟数
        return minutes

# 第三步:应用调整规则到所有时间
df['adjusted_minutes'] = df['total_minutes'].apply(adjust_minutes)

# 第四步:计算总时间并转成小时:分钟格式
total_adjusted = df['adjusted_minutes'].sum()
total_hours = total_adjusted // 60
total_remaining_minutes = total_adjusted % 60

print(f"调整后的总时间:{total_hours}:{total_remaining_minutes:02d}")

代码解释

  1. 时间转总分钟数:把每个时间(比如8:13)转换成8*60+13=493这样的整数,同时把NaN值转为0分钟(对应0:00),这样就避开了datetime.time对象不能运算的问题。
  2. 规则函数:完全按照你给定的三个条件来处理:
    • 8:00到8:15之间的时间,直接返回480分钟(也就是标准的8:00)
    • 8:15到9:00之间的时间,减去15分钟(比如8:30转成8:15)
    • 其他时间段的时间保持原样(比如6:42、9:13都不做调整)
  3. 求和与格式转换:把所有调整后的分钟数求和,再转成小时:分钟的友好格式输出,分钟数不足两位的会自动补0(比如5分钟会显示成05)。

针对你给出的示例列表验证

比如你提供的输入列表里:

  • 8:13 → 转成493分钟,属于8:00-8:15区间,调整为480分钟
  • 8:15 → 转成495分钟,属于8:15-9:00区间,调整为495-15=480分钟
  • 8:16 → 转成496分钟,调整为496-15=481分钟
  • 9:13 → 转成553分钟,晚于9:00,保持553分钟
  • NaN → 直接转为0分钟

运行代码后就能得到符合要求的总时间啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:17:32