python - pandas groupby 列来总结计数器性能

标签 python pandas dataframe counter pandas-groupby

我有一个数据框,类似于:

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/

相关文章:

python - 从原始套接字接收 IP 数据包

python - 如何将Python列表中的一个单词替换为另一个单词?

python - 如何更改满足 Pandas 特定条件的行的值?

python - 为什么这个字符串总是最大可能的数字

python - Pandas - 将列名添加到 groupby 的结果中

python - openpyxl 只读取第一个单元格

python - 如何更好地管理我在 Pandas 中的内存使用?

r - 将R中的大数据帧与每列中的多个整数分开,然后对整数求和

整行中的pandas数据框搜索字符串

python - 将 CLOB 插入从另一个数据库中选择的数据库