如何用Pandas按ID和日期小时维度分组处理数据?
用Pandas实现按ID和小时级时间分组的方法
以下是实现需求的具体步骤和代码:
导入Pandas并加载数据
先修正输入数据的格式(补充at字段的引号),再创建DataFrame:import pandas as pd data = [ {"at": "2023-01-13 16:37", "id": 2}, {"at": "2023-01-13 16:38", "id": 2}, {"at": "2023-01-12 10:03", "id": 2}, {"at": "2023-01-11 10:45", "id": 2}, {"at": "2023-01-13 16:02", "id": 3} ] df = pd.DataFrame(data)将
at字段转换为datetime类型
这是处理时间分组的必要前提:df['at'] = pd.to_datetime(df['at'])截断时间到小时级别
使用dt.floor('H')将时间向下取整到当前小时的起始点(如16:37变为16:00:00):df['at'] = df['at'].dt.floor('H')去除重复的ID-小时组合
保留每个ID对应每个小时的唯一记录:df_unique = df.drop_duplicates(subset=['id', 'at'])转换为目标JSON格式
若需要将时间格式化为你示例中的2023-01-13- 16:00:00样式,先将datetime转为指定字符串,再导出为JSON:# 格式化时间字符串(可选,匹配示例格式) df_unique['at'] = df_unique['at'].dt.strftime('%Y-%m-%d- %H:%M:%S') # 导出为JSON数组 result = df_unique.to_json(orient='records', indent=2) print(result)
运行后得到的输出与期望格式一致:
[ {"at":"2023-01-13- 16:00:00","id":2}, {"at":"2023-01-12- 10:00:00","id":2}, {"at":"2023-01-11- 10:00:00","id":2}, {"at":"2023-01-13- 16:00:00","id":3} ]
关键说明
dt.floor('H'):将时间截断到小时,也可使用dt.truncate('H'),效果完全相同。drop_duplicates:直接保留唯一的ID和小时组合,比分组聚合更简洁高效。- 若无需特殊时间格式,跳过第5步的格式化操作,导出的JSON会采用ISO标准时间格式(如
"2023-01-13T16:00:00")。
内容的提问来源于stack exchange,提问作者Mehmet Serkan Ekinci
相关产品推荐
相关产品推荐

