如何在DataFrame中给就寝开始时间加上指定小时数得到中点时间
实现方案
格式处理说明
需要先处理两列的格式问题才能做时间运算:
- 'Midpoint (h)'列使用逗号作为小数分隔符,需替换为小数点后转为数值类型
- 'Bedtime Start'列为12小时制的时间字符串,需转为pandas内置的时间类型支持时间加减
完整代码
import pandas as pd # 此处替换为你自己的DataFrame读取逻辑,示例仅做测试用 df = pd.DataFrame({ 'Bedtime Start': ['12:15 am', '10:31 pm'], 'Midpoint (h)': ['4,534', '3,22'] }) # 1. 转换Midpoint列为可计算的数值类型 df['Midpoint (h)'] = df['Midpoint (h)'].str.replace(',', '.').astype(float) # 2. 转换Bedtime Start列为时间类型 df['Bedtime Start'] = pd.to_datetime(df['Bedtime Start'], format='%I:%M %p') # 3. 时间相加生成新列 df['Time at Midpoint'] = df['Bedtime Start'] + pd.to_timedelta(df['Midpoint (h)'], unit='h') # 4. 格式化为指定字符串样式,%H对应24小时制,需要12小时制可替换为%I df['Time at Midpoint'] = df['Time at Midpoint'].dt.strftime('%H:%M %p').str.lower()
补充说明
- 时间运算会自动处理跨天场景,比如
10:31 pm加3.22小时会自动输出次日的01:44 am - 若不需要24小时制的小时显示,将最后一行的
%H改为%I即可输出06:45 pm这类12小时制格式
内容的提问来源于stack exchange,提问作者Suze Gort
相关产品推荐
相关产品推荐

