相关疑难解决方法(0)

选择每组的最大行数 - pandas性能问题

我正在为每个组选择一个最大行,并且我使用groupby/ agg来返回索引值并使用选择行loc.

例如,要分组"Id"依次选择具有最高"delta"值的行:

selected_idx = df.groupby("Id").apply(lambda df: df.delta.argmax())
selected_rows = df.loc[selected_idx, :]
Run Code Online (Sandbox Code Playgroud)

但是,这种方式很慢.实际上,当我在1300万行上使用此查询时,我的i7/16G RAM笔记本电脑挂起.

我有两个专家问题:

  1. 如何在pandas中快速运行此查询?我究竟做错了什么?
  2. 为什么这个操作如此昂贵?

[更新]非常感谢@unutbu的分析! sort_drop它是!在我的i7/32GRAM机器上,groupby + idxmax挂起了近14个小时(永远不会返回一个东西)然而sort_drop处理它只需要一分钟!

我仍然需要看看pandas如何实现每个方法,但问题现在解决了!我喜欢StackOverflow.

python performance greatest-n-per-group pandas pandas-groupby

5
推荐指数
2
解决办法
1112
查看次数