Pandas - 将 DF 列转换为索引但不重复

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

如果我有一个像这样的 pandas 数据框,我想将 'pol_class' 列变成索引,但只有这样它才不会重复(pol_class 有 3 个值:负面、中性、正面),我最好怎么做?

我正在尝试将其转换为一种格式,以便我可以调用 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')):

来帮助我们
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可以调用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 return 成为字典列表: df.to_dict(orient='records')。每个字典的键是列名。您的 所需的字典列表包含键始终为 'values''keys'。所以如果我们想使用 df.to_dict 我们需要操纵 将 DataFrame 合并为一个只有两列的 'keys''values'...呸,工作量太大了。只表达想要的列表更容易 字典作为列表理解,如上所示。