Python将列添加到Pandas Dataframe,这是另一列中的列表元素计数

时间:2015-11-28 05:36:20

标签: python list pandas count dataframe

我使用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

我需要在其中创建一个新列,其中包含诊断代码字段中包含的诊断代码计数。我一直在互联网上,但我尝试过的解决方案都没有成功。我得到的最接近的是

DF['dxCount'] = len(DF['dxCodes'])

然而,我得到了这个结果

                                        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
3       [78791, 28860, V1582, 496, 25000, 4019]  935634391      0   139360
4  [30500, 42731, 4280, 496, 59972, 4019, 3051]  929185103      0   139360

dxCount列中显示的数字是数据帧中的行数,但我希望它显示dxCodes字段中的dx代码数,因此所需的结果将是此

                                        dxCodes   memberID  newDx  dxCount  
0          [4280, 4293, 4241, 4240, 4242, 4243]  856589080      0   6
1                                       [V7612]  906903383      0   1
2                           [4550, 4553, V1582]  837210554      0   3
3       [78791, 28860, V1582, 496, 25000, 4019]  935634391      0   6
4  [30500, 42731, 4280, 496, 59972, 4019, 3051]  929185103      0   7

我的Python旅程已经走了很长一段路,但是这一次让我在多天的时间里撞到了墙上几个小时。在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

列表理解应该在这里工作:

>>> df['dxCount'] = [len(c) for c in df['dxCodes']]

虽然更好的设计可能是将dxCodes保存在由memberID索引的单独数据框中,以便将它们存储为同源字符串列。