如何修改Python代码实现按30分钟时段统计各部门-楼宇男性员工数
解决方案:按30分钟时段统计部门-楼宇的男性员工数量
我来帮你调整代码,实现按30分钟时段分组统计的需求。核心是把每条记录的时间归到对应的30分钟起始时段,然后以「时段起始时间+部门+楼宇类型」作为统计维度,只统计男性员工的数量。
修改后的完整代码
import csv from collections import Counter from datetime import datetime def get_30min_start(time_str): # 解析CSV中的时间字符串为datetime对象 dt = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S") # 计算30分钟时段的起始时间:分钟取0或30,秒数归零 if dt.minute < 30: start_dt = dt.replace(minute=0, second=0) else: start_dt = dt.replace(minute=30, second=0) # 格式化为标准字符串返回 return start_dt.strftime("%Y-%m-%d %H:%M:%S") with open('test.csv') as f: cnt = Counter() reader = csv.reader(f) # 跳过表头(如果CSV没有表头,直接删掉这行) next(reader) for row in reader: time_str, department, building_type, gender = row if gender == "m": # 获取当前记录对应的30分钟时段起始时间 start_time = get_30min_start(time_str) # 以「时段+部门+楼宇」作为统计键 cnt[(start_time, department, building_type)] += 1 # 格式化输出结果,按时段排序后展示 print("时段起始时间 | 部门 | 楼宇类型 | 男性员工数量") print("---------------------------------------------") for (start_time, dept, building), count in sorted(cnt.items()): print(f"{start_time} | {dept} | {building} | {count}")
关键修改点说明
- 时间分组逻辑:
新增的get_30min_start函数会把任意时间归到最近的30分钟起始点,比如14:46会被归到2017-09-07 14:30:00,15:02会被归到2017-09-07 15:00:00,完美匹配你的时段统计需求。 - 统计维度修正:
原来的代码错误地用「楼宇类型+性别」作为统计键,现在调整为「时段起始时间+部门+楼宇类型」,完全贴合需求中「每30分钟时段+每个department-building_type组合」的统计要求。 - 输出优化:
把结果按时段排序后,用表格形式在终端展示,比原有的Counter输出更直观易读。
注意事项
- 如果你的CSV文件没有表头,请删除代码中的
next(reader)这一行,否则会跳过第一条有效数据; - 请确保CSV的列顺序严格是
time, department, building_type, gender,如果实际列顺序不同,需要调整row的解包顺序。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

