2013-09-19 4 views
3

Использование панды, у меня есть DataFrame, который выглядит следующим образом:Фильтр DataFrame на основе максимального значения в колонке - Панды

Hour   Browser  Metric1 Metric2 Metric3 
2013-08-18 00 IE   1000  500  3000 
2013-08-19 00 FF   2000  250  6000 
2013-08-20 00 Opera  3000  450  9000 
2001-03-21 00 Chrome/29 3000  450  9000 
2013-08-21 00 Chrome/29 3000  450  9000 
2014-01-22 00 Chrome/29 3000  750  9000 

Я хочу создать массив браузеров, которые имеют максимальное значение METRIC1> 2000. Есть ли лучший способ сделать это? Вы можете видеть, что я пытаюсь сделать с приведенным ниже кодом.

browsers = df[df.Metric1.max() > 2000]['Browser'].unique() 

ответ

4

Вы можете GroupBy браузера и принять макс:

In [11]: g = df.groupby('Browser') 

In [12]: g['Metric1'].max() 
Out[12]: 
Browser 
Chrome/29 3000 
FF   2000 
IE   1000 
Opera  3000 
Name: Metric1, dtype: int64 

In [13]: over2000 = g['Metric1'].max() > 2000 

In [14]: over2000 
Out[14]: 
Browser 
Chrome/29  True 
FF   False 
IE   False 
Opera   True 
Name: Metric1, dtype: bool 

Чтобы выйти из массива, используйте это как логическую маску:

In [15]: over2000[over2000].index.values 
Out[15]: array(['Chrome/29', 'Opera'], dtype=object) 
+0

Это отлично работает. Благодаря! – DJElbow

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