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

基于Python 3.x将PostgreSQL分组排序后的DataFrame转为指定JSON格式

解决方案:按Event分组并生成排序后的JSON

这里有一个完整的Python实现方案,正好匹配你的需求——把tbl_arena的数据按event分组,每组内按timestamp升序排列,最终输出类似查询结果的JSON结构:

步骤1:导入依赖库

首先我们需要用到pandas来处理数据分组排序,json来生成最终的JSON字符串:

import pandas as pd
import json

步骤2:构造示例DataFrame(模拟从PostgreSQL读取的数据)

你给出的具体数据可以直接构造成DataFrame,注意要把timestamp转为datetime类型,确保排序逻辑正确:

# 模拟从PostgreSQL读取的tbl_arena数据
data = [
    [4458, 12499, 'football', '2017-04-30'],
    [2706, 4605, 'cricket', '2015-06-30'],
    [592, 4176, 'tennis', '2016-06-30'],
    [3427, 10126, 'badminton', '2017-05-31'],
    [717, 2313, 'football', '2016-03-31'],
    [101, 155, 'hockey', '2016-01-31'],
    [45923, 191180, 'tennis', '2015-12-31'],
    [1208, 2824, 'badminton', '2017-01-31'],
    [5577, 8906, 'cricket', '2016-02-29'],
    [111, 205, 'football', '2016-03-31'],
    [4, 8, 'hockey', '2017-09-30']
]

df = pd.DataFrame(
    data,
    columns=['count_arena_users', 'count_users', 'event', 'timestamp']
)

# 将timestamp转为datetime类型,保证排序的准确性
df['timestamp'] = pd.to_datetime(df['timestamp'])

步骤3:分组并排序

使用groupby按event分组,每组内按照timestamp升序排列:

# 分组并排序:每组内按timestamp升序
grouped = df.groupby('event').apply(lambda x: x.sort_values('timestamp', ascending=True)).reset_index(drop=True)

步骤4:构造目标JSON结构并输出

把分组后的数据转换成字典格式,再用json.dumps生成格式化的JSON字符串:

# 构造按event分组的字典结构
result = {}
for event_name, group_data in grouped.groupby('event'):
    # 把每组数据转为字典列表
    result[event_name] = group_data.to_dict('records')

# 生成格式化的JSON字符串(indent=4让结构更清晰)
json_output = json.dumps(result, indent=4, default=str)

# 打印输出
print(json_output)

输出效果

运行后你会得到这样的JSON结构(示例片段):

{
    "badminton": [
        {
            "count_arena_users": 1208,
            "count_users": 2824,
            "event": "badminton",
            "timestamp": "2017-01-31 00:00:00"
        },
        {
            "count_arena_users": 3427,
            "count_users": 10126,
            "event": "badminton",
            "timestamp": "2017-05-31 00:00:00"
        }
    ],
    // 其他event分组数据...
}

关键说明

  • 转换timestamp为datetime类型:避免字符串排序可能出现的异常(虽然你的日期格式是ISO标准,字符串排序也能工作,但转为datetime是更严谨的做法)
  • groupby.apply实现组内排序:确保每个event分组内的数据严格按照时间从早到晚排列
  • default=str参数:处理datetime类型的序列化,把日期转为字符串格式,避免JSON序列化报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:46:15