首页 > 解决方案 > Pandas groupby 和 apply with unique 非常慢

问题描述

我是熊猫的新手,所以如果答案很明显,我会提前道歉,但我找不到关于这个话题的任何答案。我有一组大约两百万行的数据,我试图按一列分组并创建唯一列表作为其他两列的聚合值:

    keys = # list of keys from an s3 paginator
    dfs = []
    for key in keys:
        print(key)
        match = re.search('^[\d]{4}-[\d]{2}-[\d]{2}/(.*)/(.*)_batch_request.csv$', key, re.IGNORECASE)
        df = pd.read_csv('s3://{}/{}'.format(bucket, key), names = ['id'])
        df['environment']=match.group(1)
        df['request_id']=match.group(2)
        dfs.append(df)
    all = pd.concat(dfs).reset_index()
    all.groupby('id').agg({'environment': 'unique', 'request_id': 'unique'})

最后一行将原始集减少到大约 300k 行,这需要几分钟。分组所需的时间似乎与帧的初始大小没有直接关系,因为使用较小输入的尝试会产生非常相似的结果。

也许我弄错了,但我期待具有 4Gb RAM 的 i7 性能更快。如果我使用nunique而不是unique仅仅计算唯一元素,它会在大约 15 秒内运行。

我做错了什么还是这是预期的表现?

谢谢

标签: pythonperformancepandasgroup-by

解决方案


推荐阅读