简体   繁体   English

来自 Pandas 数据帧的双嵌套 JSON

[英]Double nested JSON from Pandas data frame

I have a DF like this:我有一个这样的DF:

In [2]: x
Out[2]: 
   A     B      C      D      E      F
0  s1   sent1   0      0      e1     yes
1  s1   sent1   0      0      e2     no
2  s4   sent6   74     6      e1     no

I am able to get it to be ready for a nested JSON like this:我可以让它为嵌套的 JSON 做好准备,如下所示:

y = x.groupby(['A','B'])[['C','D','E','F']].apply(lambda x: x.to_dict(orient='r')).reset_index(name='sb').to_dict(orient='r')

This gives the output:这给出了 output:

[{'A': 's1',
  'B': 'sent1',
  'sb': [{'C': 158, 'D': 1, 'E': 'ent1', 'F': 'yes'},
   {'C': 158, 'D': 1, 'E': 'ent2', 'F': 'no'}]},
 {'A': 's1',
  'B': 'sent6',
  'sb': [{'C': 260, 'D': 5, 'E': 'ent1', 'F': 'no'}]}]

How I want it is to also have E and F nested as its own section similar to sb (called it tok ):我希望它也将EF嵌套为类似于sb的自己的部分(称为tok ):

[{'A': 's1',
  'B': 'sent1',
  'sb': [{'C': 158, 'D': 1, 'tok': [{'E': 'ent1', 'F': 'yes'}]]},
   {'C': 158, 'D': 1, 'tok': [{'E': 'ent2', 'F': 'no'}]}]},
 {'A': 's1',
  'B': 'sent6',
  'sb': [{'C': 260, 'D': 5, 'tok': [{'E': 'ent1', 'F': 'no'}]}]}]

Is there a way to add an extra groupby?有没有办法添加额外的groupby?

I think you need create tok column filled by list of dict before your solution and then change E,F column to tok :我认为您需要在解决方案之前创建由 dict 列表填充的tok列,然后将E,F列更改为tok

x['tok'] = x[['E','F']].apply(lambda x: [dict(x)], axis=1)
y = x.groupby(['A','B'])[['C','D','tok']].apply(lambda x: x.to_dict(orient='r')).reset_index(name='sb').to_dict(orient='r')
print (y)

[{
    'A': 's1',
    'B': 'sent1',
    'sb': [{
        'C': 0,
        'D': 0,
        'tok': [{
            'E': 'e1',
            'F': 'yes'
        }]
    }, {
        'C': 0,
        'D': 0,
        'tok': [{
            'E': 'e2',
            'F': 'no'
        }]
    }]
}, {
    'A': 's4',
    'B': 'sent6',
    'sb': [{
        'C': 74,
        'D': 6,
        'tok': [{
            'E': 'e1',
            'F': 'no'
        }]
    }]
}]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM