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

如何用Python解析CSV文件:计算平均耗时、找最长耗时及合并时间区间

解决方案代码与说明

以下是针对三个需求的完整实现代码,匹配你提供的CSV结构和数据:

import datetime
import csv
from collections import defaultdict

# 读取CSV并按姓名分组存储时间区间
person_intervals = defaultdict(list)

with open('people.csv', 'r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        name = row['姓名(Name)']
        # 转换时间字符串为datetime对象(统一日期不影响时间差计算)
        start = datetime.datetime.strptime(row['开始时间(Start)'], "%H:%M")
        end = datetime.datetime.strptime(row['结束时间(End)'], "%H:%M")
        person_intervals[name].append((start, end))

# 需求1:计算每个人的平均耗时
print("不同人员的平均耗时:")
for name, intervals in person_intervals.items():
    durations = []
    total = 0
    for start, end in intervals:
        mins = int((end - start).total_seconds() // 60)
        durations.append(str(mins))
        total += mins
    count = len(durations)
    print(f"{name} ({'+'.join(durations)})/{count} 分钟")

# 需求2:找出总耗时最长的人员
total_durations = {name: sum(int((end - start).total_seconds() // 60) for start, end in intervals) 
                   for name, intervals in person_intervals.items()}
max_name = max(total_durations, key=total_durations.get)
print(f"\n总耗时最长的人员:{max_name}(总耗时{total_durations[max_name]}分钟)")

# 需求3:合并同一人员的时间区间
def merge_intervals(intervals):
    # 按开始时间排序
    sorted_intervals = sorted(intervals, key=lambda x: x[0])
    merged = []
    for interval in sorted_intervals:
        if not merged:
            merged.append(interval)
        else:
            last_start, last_end = merged[-1]
            curr_start, curr_end = interval
            # 重叠或连续则合并
            if curr_start <= last_end:
                merged[-1] = (last_start, max(last_end, curr_end))
            else:
                merged.append(interval)
    # 转换为字符串格式
    return [f"[{s.strftime('%H:%M')},{e.strftime('%H:%M')}]" for s, e in merged]

print("\n合并后的时间区间:")
for name, intervals in person_intervals.items():
    merged_str = ','.join(merge_intervals(intervals))
    print(f"{name}: {merged_str}")

代码说明

  1. 数据分组读取:用defaultdict自动按姓名分组存储时间区间,解决了你无法按人名解析对应行的问题。
  2. 平均耗时计算:遍历每个姓名的所有时间区间,计算单个区间的分钟数,收集后按你要求的格式输出,同时统计总时长和区间数量。
  3. 总耗时最长人员:通过字典推导式快速计算每个人的总耗时,用max函数直接定位总耗时最长的姓名。
  4. 时间区间合并:先对区间按开始时间排序,再逐个判断是否与已合并区间重叠,重叠则合并为更大的区间,最终转换为你需要的字符串格式输出。

示例输出

运行代码后,针对你提供的CSV数据,输出如下:

不同人员的平均耗时:
John (60+50+60+10)/4 分钟
Tom (70)/1 分钟
Jerry (30+240)/2 分钟
Alice (60)/1 分钟

总耗时最长的人员:Jerry(总耗时270分钟)

合并后的时间区间:
John: [12:00,13:20],[13:50,14:00]
Tom: [12:00,13:10]
Jerry: [11:00,15:00]
Alice: [15:00,16:00]

内容的提问来源于stack exchange,提问作者Bk thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:15:29