Python Pandas:如何在数据框的一列中对字典的所有值求和?

Python Pandas: How can I sum all of the values of a dictionary in a column of my dataframe?

这是我的数据框:

    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'

有人可以帮忙吗?

注意:我觉得你的数据帧结构有点奇怪,如果数据集变大,可能会表现得不太理想。


在任何情况下,您的代码看起来都是格式正确的[已在 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())])

第 1 步: 确保在读取数据时列具有正确的数据类型,即 。如果已经读成string先转成dict格式

import ast
dict_col_data=[]
for row in df["test_col"]:
  dict_col_data.append(ast.literal_eval(row))
df["test_col_dict"]=dict_col_data

第 2 步:现在通过显式声明数据类型来计算每一行的总和,以避免在读取时出现任何不匹配。

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