2015-04-19 2 views
2

Вот мой dataframe:Python Pandas: Как я могу суммировать все значения словаря в столбце моего фреймворка?

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

и я хочу суммировать все значения DIC в колонке «count_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' 

Может ли кто-нибудь помочь?

ответ

3

Примечание: Ваша структура данных данных немного странна для меня и, вероятно, будет выполнять довольно субоптимально, если набор данных станет большим.


В любом случае ваш код отображается правильно сформированным [Проверено на питон 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 и exp необходимо было закончить литье.

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

@Acrobe, я использую тот же код, и я получаю сообщение об ошибке, описанное выше, но я не могу найти почему. Есть ли у вас какие-либо предложения? – UserYmY

+0

@UserYmY, какая версия python ?, вы получаете что-то значимое с помощью 'df.count_dic.apply (lambda x: x.values ​​())'? – Acorbe

+0

Я использую ipython на Python 3 – UserYmY

Смежные вопросы