如何不使用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)
逻辑说明
- 日期解析:用
datetime.strptime将字符串转为日期对象,提取小时用于时段判断 - 分组标识:通过「日期字符串+时段类型」生成唯一标识,确保跨天夜间(如次日02:00)能归到前一天的夜间分组
- 分组更新:临时字典存储每个分组的首个日期和对应值列表,最后直接提取得到目标格式
- 轻量高效:避免了Pandas中DataFrame创建、列处理、分组聚合等冗余步骤,仅用基础Python语法实现
内容的提问来源于stack exchange,提问作者ilra
相关产品推荐
相关产品推荐

