我有一个数据框,如:
index name message_counter
1 AA Counter({'hello':1})
2 BB Counter({'how':1, 'are':1, 'you':1})
3 BB Counter({'how':1})
4 AA Counter({'hello':1})
5 CC Counter({'hello':1})
我想要每个唯一名称的所有计数器的总和。所以我做了:
df.groupby('name')['message_counter'].sum()
并得到了正确的答案。就像是:
name
AA {'hello':2}
BB {'how':2, 'are':1, 'you':1}
CC {'hello':1}
但是我的数据集出乎意料地慢了。它通过6个独特的名称并通过33,000个计数器(我的数据框中的行数)进行求和,这并不是那么多,但它花费的时间比我预期的要长。像50秒以上的东西,整个180行并不需要那么多时间。
我究竟做错了什么?我怎样才能改善这个?
尝试使用有点改进的this solution:
from collections import defaultdict
def dsum(*dicts):
ret = defaultdict(int)
#add loop for Series of dicts
for x in dicts:
for d in x:
for k, v in d.items():
ret[k] += v
return dict(ret)
df1 = df.groupby('name')['message_counter'].agg(dsum)