亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

同一張表中有許多時間序列:如何以正確的格式生成 JSON 字符串

同一張表中有許多時間序列:如何以正確的格式生成 JSON 字符串

斯蒂芬大帝 2022-05-11 15:51:55
我在 Postgres 數據庫中存儲了簡單的時間序列,可以將其加載到 Pandas 數據框中。date    number      system_id1       33.1        12       24.2        13       14.1        14       15.5        1[...]   1113        11       4513        22       53.4        23       24.8        24       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或者我可以使用 Django-ORM 將它傳遞給pandas.DataFrame()Python。無論我用 ORM、Pandas 還是直接在 SQL 中獲得想要的結果都是一樣的,它只需要盡可能快,這就是讓我開始在 SQL 中尋找解決方案的原因。但是,我不知道如何。我需要的是GROUP BY date然后為每個不同的列創建一個不同的列system_id:這是否可能或可?。縂ROUP BY date要求我為該列提供一個聚合函數 ( sum, ...)。是否有一個聚合函數可以執行我正在嘗試做的事情?avgnumber
查看完整描述

2 回答

?
寶慕林4294392

TA貢獻2021條經驗 獲得超8個贊

您可以使用Postgres上的string_agg或MySQL上的GROUP_CONCAT來實現。


輸出將類似于


| 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


查看完整回答
反對 回復 2022-05-11
?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

我認為我們可以通過 pandas 交叉表功能的一些幫助來做到這一點,


我的假設是您需要將數字列作為整數而不是字符串(如我的評論解決方案中所示)


如果日期列中有任何字符串,它將被注冊為對象,因此讀取為字符串。


import pandas as pd

df = pd.read_clipbard(sep='\s+')

print(df)

    date    number  system_id

0   1   33.10   1

1   2   24.20   1

2   3   14.10   1

3   4   15.50   1

4   [...]   1113.00     1

5   1   4513.00     2

6   2   53.40   2

7   3   24.80   2

8   4   13.12   2

9   [...]   3333.00     2

然后我們可以將它傳遞給交叉表,同時傳遞system_id列參數


js_object = (pd.crosstab(df.date, df.system_id, 

values=df.number,aggfunc='first').reset_index().values.tolist())

print(js_object)

 [['1', 33.1, 4513.0],

 ['2', 24.2, 53.4],

 ['3', 14.1, 24.8],

 ['4', 15.5, 13.12],

 ['[...]', 1113.0, 3333.0]]

希望有幫助!


查看完整回答
反對 回復 2022-05-11
  • 2 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號