Pandas中pivot_table对hh:mm:ss格式时间列聚合求和的问题
解决方案
问题原因
当前Time列是字符串格式,直接调用sum聚合会执行字符串拼接逻辑,不会进行时间数值的累加计算。
实现步骤
- 先将
Time列转换为pandas.Timedelta类型,该原生类型支持时间差的加减运算 - 执行pivot_table的sum聚合,可直接得到正确的时间差求和结果
- 若需要将最终结果转回
hh:mm:ss字符串格式,可通过自定义函数格式化输出
完整代码示例
import pandas as pd # 构造原始数据 data = {'Type':['A', 'B', 'C', 'C'],'Name':['ab', 'ef','gh', 'ij'],'Time':['02:00:00', '03:02:00', '04:00:30','01:02:20']} df = pd.DataFrame(data) # 1. 将Time列转为Timedelta类型 df['Time'] = pd.to_timedelta(df['Time']) # 2. 执行pivot聚合求和 pivot = df.pivot_table(index=['Type'], values=['Time'], aggfunc='sum') # 3. (可选) 将Timedelta格式结果转为hh:mm:ss字符串 def timedelta_to_hms(td): total_seconds = int(td.total_seconds()) hours = total_seconds // 3600 minutes = (total_seconds % 3600) // 60 seconds = total_seconds % 60 return f"{hours:02d}:{minutes:02d}:{seconds:02d}" pivot['Time'] = pivot['Time'].apply(timedelta_to_hms) print(pivot)
输出结果
Time Type A 02:00:00 B 03:02:00 C 05:02:50
内容的提问来源于stack exchange,提问作者San
相关产品推荐
相关产品推荐

