我有一个必须在三个级别上分组的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。
答案 0 :(得分:5)
我认为,如果我理解正确,您可以使用groupby
和idxmax()
收集系列中的索引值,然后使用{{1}从df
中选择这些行}:
loc
另一种选择是使用idx = data.groupby(['Company','Product','Industry'])['ROI'].idxmax()
data.loc[idx]
:
reindex
在一个(不同的)数据框架上,我碰巧有用,看起来data.reindex(idx)
可能是更快的选择:
reindex