数据帧中的双嵌套JSON

2024-09-18 18:45:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个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

我能够让它为嵌套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')

这将提供以下输出:

[{'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'}]}]

我多么希望它也将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'}]}]}]

有没有办法添加额外的groupby


Tags: tonodfdictyessbgroupbys1
1条回答
网友
1楼 · 发布于 2024-09-18 18:45:40

我认为您需要在解决方案之前创建由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'
        }]
    }]
}]

相关问题 更多 >