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

如何在pandas中计算每个用户的hh:mm:ss格式时间的中位数

Timedelta列求中位数报错解决方法

错误原因

该报错是因为你使用的pandas版本不支持直接对Timedelta类型的列执行中位数聚合,pandas默认只能对数值类型执行这类聚合计算。

解决方法

有两种可行方案:

方案一:类型转换计算(兼容所有pandas版本)

先将时间差转换为数值类型的总秒数,计算得到中位数后再转回Timedelta格式即可,修改后的完整代码如下:

file['date'] = pd.to_datetime(file['date'])
# 计算操作间隔时间差
file['diff'] = file.groupby(['operation', 'user'])['date'].diff().fillna(pd.Timedelta(0))
# 过滤间隔不超过20秒的记录,使用Timedelta对象比较避免字符串兼容问题
file = file.loc[file['diff'] <= pd.Timedelta(seconds=20)]
# 转换为总秒数的数值列
file['diff_seconds'] = file['diff'].dt.total_seconds()
# 聚合求中位数后转回时间差格式
results = file.groupby(['operation', 'user'])['diff_seconds'].median().apply(pd.to_timedelta, unit='s')
# 若需要输出hh:mm:ss格式的字符串,可添加下行代码
# results = results.apply(lambda x: str(x).split()[-1])

方案二:升级pandas版本

pandas 1.3.0及以上版本已经原生支持Timedelta类型的中位数聚合,你可以升级pandas后直接运行原有代码:

pip install --upgrade pandas

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:27:03