基于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
相关产品推荐
相关产品推荐

