【发布时间】:2016-03-08 18:00:25
【问题描述】:
假设我有这样的数据框:
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
我想按键汇总'a'列的内容,按'id'分组,我尝试的是:
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:我也试过使用 Counter(),没有成功...
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...
【问题讨论】:
-
我怀疑您的第一个数据框 da1 是否是您想要的:带有值的 dicts 列通常不是您放入数据框的内容。
-
你是对的!我实际上将使用非常相似的结构将此类字段插入数据库。
标签: python python-2.7 dictionary pandas merge