如何将时间戳差值转为时长并制作跑者完赛时长堆叠柱状图?
时间戳转纯时长格式的实用方法
不管你用Excel、Python还是Tableau,核心都是把时间差转成纯数字的时长单位(比如分钟、小时),这样才能正常做堆叠柱状图,下面分工具给你具体操作:
Excel 操作步骤
- 先确认起跑、结束时间列是「时间格式」(不是文本),如果是文本,先转成时间:
=TIMEVALUE(单元格) - 计算纯数字时长(推荐用分钟,精度够且图表好处理):
在空白单元格输入公式=(结束时间单元格 - 起跑时间单元格)*1440,回车后得到的就是分钟数,比如跑者1的30分钟直接显示30,完美适配Y轴。 - 要是想同时显示“X小时Y分钟”的文本,用公式:
=TEXT(结束时间-起跑时间,"h""小时""m""分钟"""),但做图表时记得用数字版的时长,文本没法堆叠计算。
Python Pandas 处理代码
假设你的数据存在CSV里,先把时间列解析成日期时间格式,再算时长:
import pandas as pd # 读数据,自动解析时间列 df = pd.read_csv("跑者数据.csv", parse_dates=["起跑时间", "结束时间"]) # 算完赛时长(转成分钟数,纯数字) df["完赛时长(分钟)"] = (df["结束时间"] - df["起跑时间"]).dt.total_seconds() / 60 # 要转成“X小时Y分钟”文本的话 df["完赛时长_文本"] = df.apply(lambda row: f"{(row['结束时间']-row['起跑时间']).hours}小时{(row['结束时间']-row['起跑时间']).minutes}分钟", axis=1)
用完赛时长(分钟)这列当Y轴数据,配合日期X轴、跑者维度,就能生成堆叠柱状图。
Tableau 配置方法
- 把起跑、结束时间字段设置成「日期时间」类型;
- 新建计算字段,命名为「完赛时长(分钟)」,公式写:
DATEDIFF('minute', [起跑时间], [结束时间]); - 把「日期」拖到X轴,「完赛时长(分钟)」拖到Y轴,「跑者」拖到「颜色」或「标记」的堆叠选项里,直接生成你要的堆叠柱状图。
为啥会出现“3:00 AM”这种格式?
其实你算出来的不是时间戳,是时间差,只是工具默认把它当成了一天内的时间来显示,比如3小时的时间差就显示成凌晨3点。只要转成纯数字的时长单位,图表工具就能正确识别并堆叠。
内容的提问来源于stack exchange,提问作者skyyyy
相关产品推荐
相关产品推荐

