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

如何用Pandas计算DataFrame列中字典的每周总时长

计算Pandas DataFrame中每周总时长的方法

假设你的DataFrame df 的hours列每个元素都是存储每日时段的字典,要计算每周总时长,可以按照以下步骤实现:

1. 编写单日时长计算函数

先写一个辅助函数,把类似'8:0-18:30'的时段字符串转换成小时数:

from datetime import datetime

def calculate_daily_hours(time_str):
    # 拆分开始和结束时间
    start_str, end_str = time_str.split('-')
    # 解析为datetime对象(固定日期不影响差值计算)
    start = datetime.strptime(start_str, '%H:%M')
    end = datetime.strptime(end_str, '%H:%M')
    # 计算时长并转换为小时
    duration = (end - start).total_seconds() / 3600
    # 处理当天无时长的情况(比如0:0-0:0)
    return max(duration, 0)

2. 计算单条记录的每周总时长

对hours列的每个字典,遍历所有时段值,用上面的函数计算单日时长后求和:

def calculate_weekly_total(hours_dict):
    return sum(calculate_daily_hours(time_str) for time_str in hours_dict.values())

3. 应用到整个DataFrame

用apply方法把函数应用到hours列,生成新的总时长列:

import pandas as pd

# 测试数据
data = {
    'hours': [
        {'Monday': '0:0-0:0',
         'Tuesday': '8:0-18:30',
         'Wednesday': '8:0-18:30',
         'Thursday': '8:0-18:30',
         'Friday': '8:0-18:30',
         'Saturday': '8:0-14:0'}
    ]
}
df = pd.DataFrame(data)

# 生成每周总时长列
df['weekly_total_hours'] = df['hours'].apply(calculate_weekly_total)

# 查看结果
print(df['weekly_total_hours'])

运行后输出为:

0    48.0
Name: weekly_total_hours, dtype: float64

补充说明

  • 自动处理0:0-0:0这类无时长的情况,返回0
  • 如果遇到跨天时段(比如22:00-6:00),当前函数会返回负数,可根据实际需求调整逻辑(比如加上24小时)
  • 计算结果为小时单位的浮点数,方便后续统计分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:50:26