Предположим, у меня есть такая dataframe:Python dataframe словарь агрегация слияния с суммой не удалось
da1 = DataFrame({'id':['bub','char', 'bub'],
'a':[{'t1':1,'t2':3},
{'t1':3},
{'t2':1}]})
print da1
a id
0 {u't2': 3, u't1': 1} bub
1 {u't1': 3} char
2 {u't2': 1} bub
Я хочу просуммировать содержимое столбца «а» по ключу, группировка по «ид», что я попытался было:
print da1.groupby('id')\
.aggregate({
'a': lambda x: DataFrame.from_dict(x).sum().to_dict()})
id a
bub <built-in method values of dict object at 0x7f...
char <built-in method values of dict object at 0x7f...
Но если я сделать последующие:
bub = [{'t1':1,'t2':3}, {'t2':1}]
print DataFrame.from_dict(bub).sum().to_dict()
{'t2': 4.0, 't1': 1.0}
я получаю то, что я хотел в первый раз, что мне не хватает?
UPD: Я также попытался с помощью счетчика(), без успеха ...
from collections import Counter
print dict(sum((Counter(dict(x)) for x in bub),Counter()))
{'t2': 4, 't1': 1}
print da1.groupby('id')\
.aggregate({
'a': lambda dic: dict(sum((Counter(dict(x)) for x in dic),Counter()))})
id a
bub <built-in method values of dict object at 0x7f...
char <built-in method values of dict object at 0x7f...
Я сомневаюсь, что ваш первый DataFrame, da1, является тем, что вы хотите: столбец с dicts для значений обычно не является чем-то, что вы помещаете в dataframe. – Evert
Вы правы! Я действительно использую очень похожую структуру для вставки такого поля в базу данных. – dtj