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

如何不使用Pandas DataFrame实现日期时段分组并生成目标字典

无需Pandas DataFrame的日期时段分组实现

需求说明

现有两个列表:

dates = ['2022-10-16 17:00:00', '2022-10-16 18:00:00', '2022-10-16 21:00:00', '2022-10-16 22:00:00']
values = [1920.0, 570.0, 1680.0, 900.0]

需按以下规则分组:

  • 06:00-17:00 归为上午时段
  • 18:00-次日05:00 归为夜间时段
    最终生成格式如下的字典:
{'2022-10-16 17:00:00': [1920.0], '2022-10-16 18:00:00': [570.0, 1680.0, 900.0]}

纯Python实现方案

无需依赖Pandas,直接用datetime模块完成分组逻辑:

from datetime import datetime

def group_by_period(dates, values):
    period_groups = {}
    for date_str, val in zip(dates, values):
        dt = datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S')
        hour = dt.hour
        
        # 判断时段并生成唯一分组标识
        if 6 <= hour <= 17:
            group_key = f"{dt.strftime('%Y-%m-%d')}_morning"
        else:
            # 0-5点属于前一天的夜间,18-23点属于当天的夜间
            if hour < 6:
                group_date = dt.replace(day=dt.day-1).strftime('%Y-%m-%d')
            else:
                group_date = dt.strftime('%Y-%m-%d')
            group_key = f"{group_date}_night"
        
        # 更新分组数据
        if group_key not in period_groups:
            period_groups[group_key] = (date_str, [val])
        else:
            period_groups[group_key][1].append(val)
    
    # 转换为目标格式字典
    return {k: v for k, v in period_groups.values()}

# 测试调用
result = group_by_period(dates, values)
print(result)

逻辑说明

  1. 日期解析:用datetime.strptime将字符串转为日期对象,提取小时用于时段判断
  2. 分组标识:通过「日期字符串+时段类型」生成唯一标识,确保跨天夜间(如次日02:00)能归到前一天的夜间分组
  3. 分组更新:临时字典存储每个分组的首个日期和对应值列表,最后直接提取得到目标格式
  4. 轻量高效:避免了Pandas中DataFrame创建、列处理、分组聚合等冗余步骤,仅用基础Python语法实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:05:18