我有一个数据框,类似于:
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)
关于python - pandas groupby 列来总结计数器性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49105074/