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

如何计算Pandas日期时间列的仅时间分量平均值?

解决Pandas DateTime列忽略日期计算时间平均值的问题

你遇到的这个报错太典型了——datetime.time对象本身不支持加法、除法这类算术运算,所以直接调用.mean()肯定会抛出类型错误。我们只需要先把时间转换成可计算的数值,求完平均再转回去就行,给你两种实用的解决方法:

方法一:将时间转换为当天总秒数计算

这是最直观的思路:把每个时间点转换成从当天00:00开始的总秒数,数值类型就能正常做均值计算了:

import pandas as pd
from datetime import timedelta

# 模拟你的原始数据
data = {'dte': ['2018-02-20 20:30:00', '2018-09-03 20:30:00', '2017-05-18 21:00:00', '2014-11-26 21:00:00']}
df = pd.DataFrame(data)
df['dte'] = pd.to_datetime(df['dte'])

# 1. 把时间转成当天的总秒数
df['total_seconds'] = df['dte'].dt.hour * 3600 + df['dte'].dt.minute * 60 + df['dte'].dt.second

# 2. 计算平均秒数
avg_seconds = df['total_seconds'].mean()

# 3. 把平均秒数转回时间格式
avg_time = timedelta(seconds=avg_seconds).time()

print(avg_time)  # 输出: 20:45:00,和你的预期完全一致

方法二:用Lambda简化时间转秒操作

如果觉得上面的计算步骤有点繁琐,可以用lambda函数直接处理dt.time对象,代码更简洁:

# 直接提取time对象并转成秒数
df['time_seconds'] = df['dte'].dt.time.apply(lambda t: t.hour * 3600 + t.minute * 60 + t.second)

avg_seconds = df['time_seconds'].mean()
avg_time = timedelta(seconds=avg_seconds).time()

验证你的示例数据

你的四个时间对应的秒数分别是:

  • 20:30:00 → 203600 +3060 = 73800秒
  • 20:30:00 → 73800秒
  • 21:00:00 → 21*3600 =75600秒
  • 21:00:00 →75600秒

平均秒数 = (738002 +756002)/4 =74700秒,转成时间就是20小时45分钟,完全符合预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:28