python - 同一个表中有很多时间序列: how to generate JSON string in correct format

标签 python pandas postgresql django-orm

我在 Postgres 数据库中存储了简单的时间序列,我可以将其加载到 Pandas 数据帧中。

date    number      system_id
1       33.1        1
2       24.2        1
3       14.1        1
4       15.5        1
[...]   1113        1
1       4513        2
2       53.4        2
3       24.8        2
4       13.12       2
[...]   3333        2

想要的结果是一个 JSON 字符串,我可以将其提供给我的 JavaScript 图表,如下所示:

[

[1, number in date 1(of system_id 1), number in date 1(of system_id 2), number in date 1(of system_id 3), ...],
[2, number 2(of system_id 1), number 2(of system_id 2), number 2(of system_id 3), ...],
[3, number 3(of system_id 1), number 3(of system_id 2), number 3(of system_id 3), ...],
[4, number 4(of system_id 1), number 4(of system_id 2), number 4(of system_id 3), ...],
[...]

]

我可以直接在SQL中拉取上表

SELECT * FROM MyTable

或者我可以将其传递给pandas.DataFrame()在 Python 中使用 Django-ORM。

无论是使用 ORM、Pandas 还是直接在 SQL 中获得想要的结果都是一样的,只需要尽可能快,这就是让我开始寻找 SQL 解决方案的原因。

但是,我不明白如何。我需要的是GROUP BY date然后为每个不同的 system_id 创建一个不同的列:这是否可能或可取?

GROUP BY date要求我为 sum 提供聚合函数( avgnumber ...)柱子。是否有一个聚合函数可以执行我想要做的事情?

最佳答案

您可以通过string_agg来实现这一点在 Postgres 上或 GROUP_CONCAT在 MySQL 上。

输出类似于

| date | numbers       |
|------|---------------|
| 1    | 33.1,4513,... |
| 2    | 24.2,53.4,... |
| 3    | 14.1,24.8,... |

以及查询

SELECT date, STRING_AGG(number) numbers 
FROM MyTable 
GROUP BY date

关于python - 同一个表中有很多时间序列: how to generate JSON string in correct format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57645801/

相关文章:

python - 在 Python 中导入常用模块

python - Pandas 在两个数据帧之间执行 SQL 减法

python - 如何合并大多数重复的行

java - IS NOT NULL 总是返回真 JPA 查询

Python gtalk 客户端代码不工作

Python - 从解码的 JSON 数据中删除 "empty"值 ('[]' 和 '""')

python - 将 Glue Connection 资源的值传递给 Python Job

python - 如何使用字符串列表通过 Python 3 搜索 Pandas 数据框

Django 将迁移问题更改为新的 Postgres DB

django - 如何使用 extra() 可移植跨数据库后端进行 Django 查询?