Python Pandas:如何在数据框的列中汇总字典的所有值?

时间:2015-04-19 12:21:41

标签: python dictionary pandas lambda sum

这是我的数据框:

    name                            count_dic
0  name1  {'x2,bv.': 435, 'x3': 4, 'x1': 123}
1  name2            {'x5': 98, 'x2,bv.': 435}

我想在'count_dic'列中总结dic的所有值,得到类似的结果:

    name                            count_dic   sum_vals
0  name1  {'x2,bv.': 435, 'x3': 4, 'x1': 123}    562
1  name2            {'x5': 98, 'x2,bv.': 435}    533

以下是我的尝试:

df_map.count_dic.apply(lambda L: sum(L.values())).sum()

但是我收到以下错误:

TypeError: unsupported operand type(s) for +: 'dict_values' and 'dict_values'

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

注意:您的数据框结构对我来说有点奇怪,如果数据集变大,可能会表现得非常不理想。


在任何情况下,您的代码都显示格式正确[在Python 2.7.8和3.4.1上测试]

 df = pd.DataFrame(columns = ['name','count_dic'])
 df.loc[0] = ['name0',{'x2,bv.': 435, 'x3': 4, 'x1': 123}]
 df.loc[1] = ['name1',{'x5': 98, 'x2,bv.': 435}]

 df.count_dic.apply(lambda x : sum(x.values())).sum()

       1095

如果你想要按行的值

 df.count_dic.apply(lambda x : sum(x.values()))

        0    562
        1    533
    Name: count_dic, dtype: int64

该用法还有一个与所涉及的变量类型相关的特定问题,这些问题不是int,需要进行显式转换。

 df.count_dic.apply(lambda x : sum([int(y) for y in x.values())])