pandas groupby专栏总结了Counter的表现

问题描述 投票:2回答:1

我有一个数据框,如:

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行并不需要那么多时间。

我究竟做错了什么?我怎样才能改善这个?

python pandas dataframe counter pandas-groupby
1个回答
2
投票

尝试使用有点改进的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)
© www.soinside.com 2019 - 2024. All rights reserved.