我正在使用 pymongo API 从 MongoDB 数据库中提取数据并将其插入到 pandas 数据框中。数据库中的某些字段包含诊断代码列表。其中大多数都有一个附带的“计数”字段,但有一个没有。此计数对于我计划定期对此数据执行的分析非常重要。数据框“DF”如下所示:
dxCodes memberID newDx
0 [4280, 4293, 4241, 4240, 4242, 4243] 856589080 0
1 [V7612] 906903383 0
2 [4550, 4553, V1582] 837210554 0
3 [78791, 28860, V1582, 496, 25000, 4019] 935634391 0
4 [30500, 42731, 4280, 496, 59972, 4019, 3051] 929185103 0
Run Code Online (Sandbox Code Playgroud)
我需要在其中创建一个新列,其中包含诊断代码字段中包含的诊断代码的计数。我查遍了互联网,但尝试过的解决方案都没有成功。我得到的最接近的是这个
DF['dxCount'] = len(DF['dxCodes'])
Run Code Online (Sandbox Code Playgroud)
但是,我得到了这个结果
dxCodes memberID newDx dxCount
0 [4280, 4293, 4241, 4240, 4242, 4243] 856589080 0 139360
1 [V7612] 906903383 0 139360
2 [4550, 4553, V1582] 837210554 0 139360 …Run Code Online (Sandbox Code Playgroud) 我一直在尝试将pandas数据帧的行作为单独的文档插入到mongodb集合中.我使用pymongo从MongoDB中提取数据,执行一些转换,运行评分算法,并将分数作为附加列添加到数据帧.最后一步是将行作为单独的文档插入到mongoDB数据库的特殊集合中,但我完全被卡住了.我的示例数据帧df看起来像这样.
memberID dxCodes dxCount score
0 856589080 [4280, 4293, 4241, 4240, 4242, 4243] 6 1.8
1 906903383 [V7612] 1 2.6
2 837210554 [4550, 4553, V1582] 3 3.1
3 935634391 [78791, 28860, V1582, 496, 25000, 4019] 6 1.1
4 929185103 [30500, 42731, 4280, 496, 59972, 4019, 3051] 7 2.8
Run Code Online (Sandbox Code Playgroud)
MemberID是一个字符串,dx代码是一个数组(在MongoDB术语中),dxCount是一个int,得分是一个浮点数.我一直在用我发现的一段代码来回应一个模糊的类似问题.
import json
import datetime
df = pandas.DataFrame.from_dict({'A': {1: datetime.datetime.now()}})
records = json.loads(df.T.to_json()).values()
db.temp.insert_many(records)
Run Code Online (Sandbox Code Playgroud)
这是我能够在我的收藏中得到的:
{
"_id" : ObjectId("565a8f206d8bc51a08745de0"),
"A" : NumberLong(1448753856695)
}
Run Code Online (Sandbox Code Playgroud)
它并不多,但它和我一样接近.我花了很多时间在谷歌上搜索并在黑暗中拍摄但尚未破解它.非常感谢任何指导,感谢您的帮助!