Python Pandas groupby forloop& Idxmax

时间:2013-09-18 18:35:25

标签: python for-loop pandas

我有一个必须在三个级别上分组的DataFrame,然后返回最高值。每天都有一个每个唯一值的回报,我想找到最高的回报和细节。

data.groupby(['Company','Product','Industry'])['ROI'].idxmax()

回报表明:

Target   - Dish Soap - House       had a 5% ROI on 9/17
Best Buy - CDs       - Electronics had a 3% ROI on 9/3

是最高的。

以下是一些示例数据:

+----------+-----------+-------------+---------+-----+
| Industry | Product   | Industry    | Date    | ROI |
+----------+-----------+-------------+---------+-----+
| Target   | Dish Soap | House       | 9/17/13 | 5%  |
| Target   | Dish Soap | House       | 9/16/13 | 2%  |
| BestBuy  | CDs       | Electronics | 9/1/13  | 1%  |
| BestBuy  | CDs       | Electroincs | 9/3/13  | 3%  |
| ...

不确定这是for循环,还是使用.ix。

1 个答案:

答案 0 :(得分:5)

我认为,如果我理解正确,您可以使用groupbyidxmax()收集系列中的索引值,然后使用{{1}从df中选择这些行}:

loc

另一种选择是使用idx = data.groupby(['Company','Product','Industry'])['ROI'].idxmax() data.loc[idx]

reindex

在一个(不同的)数据框架上,我碰巧有用,看起来data.reindex(idx) 可能是更快的选择:

reindex