2013-09-18 2 views
1

У меня есть DataFrame, который должен быть сгруппирован на трех уровнях и будет иметь самое высокое значение. Каждый день появляется возврат за каждое уникальное значение, и я хотел бы найти наивысший доход и детали.Python Pandas groupby forloop & Idxmax

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% | 
| ... 

Не уверен, если это будет цикл, или с помощью .ix.

ответ

5

Я думаю, если я вас правильно понимаю, вы могли бы собрать значения индекса в серии с использованием groupby и idxmax(), а затем выбрать те строки из df с помощью loc:

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

другой вариант заключается в использовании reindex :

data.reindex(idx) 

на (разные) dataframe мне довелось иметь под рукой, по-видимому reindex может быть быстрее вариант:

In [39]: %timeit df.reindex(idx) 
10000 loops, best of 3: 121 us per loop 

In [40]: %timeit df.loc[idx] 
10000 loops, best of 3: 147 us per loop 
+0

Было бы здорово, если бы max (и друзья) приняли ключ, как в groupby, так и в df. Это, вероятно, все еще будет быстрее, хотя ... –

+0

Да, я хочу, чтобы 'NumPy' имел параметр' key' для 'max' и' sort' тоже! (Хотя, как вы сказали, он, вероятно, не был включен, потому что вызов функции Python для каждого элемента массива NumPy, или DataFrame был бы серьезным препятствием для ускорения.) – unutbu

+0

Я считаю, что это должно быть 'data.loc' not 'data.iloc'. По крайней мере, это то, что сработало для меня. –

Смежные вопросы