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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:35:18