python - 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 秒内运行。
我做错了什么还是这是预期的表现?
谢谢
解决方案
推荐阅读
- javascript - 在适当的主菜单项下动态渲染 Nav 的子菜单
- git - 了解 Git LFS 存储库如何为未安装 LFS 扩展的开发人员工作
- reactjs - 使用reactjs提交表单后如何显示模式弹出窗口?
- c# - 我不明白为什么我有这两个错误
- scala - 如何在scala中创建类似的枚举类
- javascript - 反应 onSubmit 按钮 POST 不工作
- c++ - MFC:如何在标题栏和任务栏中设置不同的图标
- swift - 从扩展中调用 viewController 中的函数?
- sql - SQL's INNER JOIN resulting in duplicate entries even though there are no duplicate column values in all 3 tables
- java - Choice between groupby and filter with infinite streams in reactor