如何用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
相关产品推荐
相关产品推荐

