首先,讓我們重現您的數據幀從類型的字典的列表。 (下次你可以幫助我們通過張貼df.to_dict('split'))
:
import json
import numpy as np
import pandas as pd
data = [
{ "key" : "Negative" ,
"values" : [ [ 1439489400000, 4] , [ 1439489460000, 8],
[ 1439489520000, 5], ]},
{ "key" : "Neutral" ,
"values" : [ [ 1439489400000, 0] , [ 1439489460000, 4],
[ 1439489520000, 15], ]},
{ "key" : "Positive" ,
"values" : [ [ 1439489400000, 6] , [ 1439489460000, 14],
[ 1439489520000, 12], ]}]
df = pd.concat({ dct['key']:pd.DataFrame(dct['values']) for dct in data})
df.index = df.index.droplevel(level=1)
df.index.names = ['A']
df.columns=['B', 'C']
df = df.reset_index()
# A B C
# 0 Negative 1439489400000 4
# 1 Negative 1439489460000 8
# 2 Negative 1439489520000 5
# 3 Neutral 1439489400000 0
# 4 Neutral 1439489460000 4
# 5 Neutral 1439489520000 15
# 6 Positive 1439489400000 6
# 7 Positive 1439489460000 14
# 8 Positive 1439489520000 12
現在我們可以重新生成數據框類型的字典列表:
newdata = [{'key':key, 'values': grp[['B','C']].values.tolist()}
for key, grp in df.groupby('A')]
所需的JSON可以通過調用json.dumps
獲得:
print(json.dumps(newdata))
產生
[{"values": [[1439489400000, 4], [1439489460000, 8], [1439489520000, 5]], "key": "Negative"}, {"values": [[1439489400000, 0], [1439489460000, 4], [1439489520000, 15]], "key": "Neutral"}, {"values": [[1439489400000, 6], [1439489460000, 14], [1439489520000, 12]], "key": "Positive"}]
只有一個方向,這使得df.to_dict
返回類型的字典列表: df.to_dict(orient='records')
。每個字典的鍵都是列名。您的 所需的清單列表中有密鑰的密鑰始終爲'values'
和 'keys'
。因此,如果我們想要使用df.to_dict
,我們需要將給定DataFrame的 操作爲只有兩列,分別爲'keys'
和 'values'
......唉,工作太多了。如上所示,僅僅將字典 作爲列表理解來表達是比較容易的。
如果您將'pol_class'的唯一值作爲索引,那麼您的DataFrame將只有3行。你想成爲那些行的內容? – BrenBarn
@BrenBarn - 無論它需要調用pd.to_json(orient ='index')來獲得這種JSON格式?那麼必須是列表的列表,每個內部列表是[JStimestamp,count]? – SpicyClubSauce
如果你的問題是關於如何獲得這個JSON,你應該修改它並且可能重寫它。這聽起來像你根本不關心DataFrame結構,你只是想要某種類型的JSON。 – BrenBarn