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

如何用Pandas按ID和日期小时维度分组处理数据?

用Pandas实现按ID和小时级时间分组的方法

以下是实现需求的具体步骤和代码:

  1. 导入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)
    
  2. 将at字段转换为datetime类型
    这是处理时间分组的必要前提:

    df['at'] = pd.to_datetime(df['at'])
    
  3. 截断时间到小时级别
    使用dt.floor('H')将时间向下取整到当前小时的起始点(如16:37变为16:00:00):

    df['at'] = df['at'].dt.floor('H')
    
  4. 去除重复的ID-小时组合
    保留每个ID对应每个小时的唯一记录:

    df_unique = df.drop_duplicates(subset=['id', 'at'])
    
  5. 转换为目标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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:57