簡體   English   中英

熊貓-將DF列轉換為索引但不重復

[英]Pandas - turning a DF column into an Index but without duplication

如果我有一個像這樣的熊貓數據框,並且我想將'pol_class'列轉換為索引,但只有它才能避免重復(pol_class具有3個值:Negative,Neutral,Positive),如何我最好這樣做嗎?

在此處輸入圖片說明

我正在嘗試將其轉換為一種格式,以便最終可以調用pandas的.to_json(orient ='index')格式以使其轉換為此JSON格式...(我將刪除'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],  
       ...]
}]

首先,讓我們從字典列表中復制您的DataFrame。 (下次您可以通過發布df.to_dict('split'))來幫助我們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

現在我們可以從DataFrame重新生成字典列表:

newdata = [{'key':key, 'values': grp[['B','C']].values.tolist()} 
           for key, grp in df.groupby('A')]

可以通過調用json.dumps獲得所需的JSON:

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' dict。 因此,如果我們想使用df.to_dict則需要將給定的DataFrame操縱成只有兩個列,即'keys''values' ……ba,太多了。 如上所示,僅將所需的字典列表表達為列表理解會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM