[英]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.