使用列作为键将pandas dataframe转换为json

时间:2019-03-05 14:23:00

标签: python json pandas dataframe

我有一个像这样的数据框:

df:
Col1    col2    col3    col4
 A       1        2       3
 A       4        5       6
 A       7        8       9
 B       3        2       1
 B       4        4       4

我想为每个col1值创建一个嵌套的json文件,在其内部将有col2,col3,col4作为键以及这些列的值,

输出应如下所示:

{
"col1": A,
"Other_details": {
    "col2": 1,
    "col3": 2,
    "col4": 3
},{
    "col2": 4,
    "col3": 5,
    "col4": 6
},{
    "col2": 7,
    "col3": 8,
    "col4": 9
},
},
{
"col1": B,
"Other_details": {
    "col2": 3,
    "col3": 2,
    "col4": 1
},{
    "col2": 4,
    "col3": 4,
    "col4": 4
}
}

如何最有效地做到这一点

1 个答案:

答案 0 :(得分:0)

DataFrame.groupbyDataFrame.applyDataFrame.to_dict一起使用,所有没有由Index.difference过滤的Col1的列,由DataFrame.reset_index创建DataFrame最后使用DataFrame.to_dict进行字典输出,或使用DataFrame.to_json进行json输出:

cols = df.columns.difference(['Col1'])
d = (df.groupby('Col1')[cols]
        .apply(lambda x: x.to_dict('r'))
        .reset_index(name='Other_details')
        .to_dict(orient='records'))

cols = df.columns.difference(['Col1'])
d = (df.groupby('Col1')[cols]
        .apply(lambda x: x.to_dict('r'))
        .reset_index(name='Other_details')
        .to_json(orient='records'))