假设我有这样的数据:
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:我也试过使用计数器(),但没有成功.
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...发布于 2015-12-04 13:28:45
我找到了解决这个问题的方法,也许效率很低,但对我来说很管用。
在使用apply方法时,我发现了一个关于类似错误的问题,并且修复了该错误。由于它们固定了应用程序,所以我使用了apply函数来做我想做的事情。
print DataFrame({'visitorId':da1.groupby('id', as_index=False).groups.keys(),
'a':da1.groupby('id', as_index=False)\
.apply(lambda dic:
dict(sum((Counter(dict(x)) for x in dic.a),
Counter())))})
a visitorId
0 {u't2': 4, u't1': 1} bub
1 {u't1': 3} char我对分组数据使用了apply方法,获得“标识符”的最简单方法是获取组键。如果你对如何更有效地做这件事有建议,请告诉我!
https://stackoverflow.com/questions/34077572
复制相似问题