我在 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
提供聚合函数( avg
、 number
...)柱子。是否有一个聚合函数可以执行我想要做的事情?
最佳答案
您可以通过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/