我正在尝试将 mongodb 文档转换为矩阵格式
例如
对于此输入
[
{
username: "user1",
result: [
{
subId: "sub1",
marks: 90
},
{
subId: "sub4",
marks: 92
},
{
subId: "sub3",
marks: 73
}
]
},
{
username: "user3",
result: [
{
subId: "sub3",
marks: 87
},
{
subId: "sub5",
marks: 91
},
{
subId: "sub2",
marks: 88
}
]
}
]
输出应该是这样的
sub1 | sub2 | sub3 | sub4 | sub5 |
======|=======|========|========|========|========|
user1 | 90 | | 73 | | |
user2 | | | | | |
user3 | | 88 | 87 | | 91 |
我尝试通过 mongodb 聚合、pandas 和 numpy 库来解决这个问题,但无法获得所需的输出。
你能建议我一些其他的方法来让它工作吗?
最佳答案
您必须将每个文档转换为平面文档(非嵌套)。
所以第一条记录将是这样的:
{'user': 'user1', 'sub1': 90, 'sub4': 92, 'sub3': 73}
现在您可以使用 pandas 从字典进行创建。
这是完整的代码:
doc_list = [
{
'username': "user1",
'result': [
{
'subId': "sub1",
'marks': 90
},
{
'subId': "sub4",
'marks': 92
},
{
'subId': "sub3",
'marks': 73
}
]
},
{
'username': "user3",
'result': [
{
'subId': "sub3",
'marks': 87
},
{
'subId': "sub5",
'marks': 91
},
{
'subId': "sub2",
'marks': 88
}
]
}
]
pandas_list = []
for doc in doc_list:
line = {'user': doc['username']}
for sub_mark in doc['result']:
line[sub_mark['subId']] = sub_mark['marks']
pandas_list.append(line)
df = pd.DataFrame.from_records(pandas_list)
关于mongodb - 从 mongodb 文档创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52746534/