2015-08-15 44 views
0

如果我有一個像這樣的熊貓數據框,並且我想把'pol_class'列放入索引中,但是隻有它是不會重複的(pol_class有3個值:負面,中性,正面),我最好怎麼做呢?熊貓 - 把一個DF列變成一個索引但沒有重複

enter image description here

我試圖進入它的格式,這樣我可以叫大熊貓.to_json(東方=‘指數’)格式,最終得到它進入這個JSON格式...(I」會被丟棄「time_by_min」列,只是用另兩個非pol_class列)

[{ 
     "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], 
     ...] 
}] 
+0

如果您將'pol_class'的唯一值作爲索引,那麼您的DataFrame將只有3行。你想成爲那些行的內容? – BrenBarn

+0

@BrenBarn - 無論它需要調用pd.to_json(orient ='index')來獲得這種JSON格式?那麼必須是列表的列表,每個內部列表是[JStimestamp,count]? – SpicyClubSauce

+0

如果你的問題是關於如何獲得這個JSON,你應該修改它並且可能重寫它。這聽起來像你根本不關心DataFrame結構,你只是想要某種類型的JSON。 – BrenBarn

回答

3

首先,讓我們重現您的數據幀從類型的字典的列表。 (下次你可以幫助我們通過張貼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' ......唉,工作太多了。如上所示,僅僅將字典 作爲列表理解來表達是比較容易的。

+0

這個!!!那個單行的新數據代碼!並感謝df.to_dict也提醒,注意! – SpicyClubSauce