[英]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
):我希望它也将E
和F
嵌套为类似于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.