Панды: получить самые высокие значения во всем фрейме данных, а значения строки / столбца?

1

У меня есть панда данных, продаж по отделам по годам:

 department    2001    2002    2003    ...
 Food          1300    1444    1573    ...
 Music         1370    1244    1173    ...

Я хочу найти 10 наивысших значений по всему набору данных, а также посмотреть, какой отдел и год для каждого.

Есть ли способ, которым я могу найти оба одновременно? Я знаю, как получить наивысшее значение в каждой строке (idxmax) и каждом столбце (idxmax(axis=1)), но я не знаю, как искать весь фрейм данных.

Теги:
pandas

1 ответ

2
Лучший ответ

Вы можете использовать что-то вроде этого (простой случай 3-крупнейшего здесь):

>>> df.stack().sort_values(ascending=False).nlargest(3)

sports  2002    72
music   2001    67
sports  2001    54
dtype: int64

Чтобы создать этот пример:

import pandas as pd
import numpy as np
np.random.seed(444)
depts = ['food', 'music', 'sports']
years = list(range(2001, 2004))
df = pd.DataFrame(np.random.randint(0, 100, (3, 3)),
                  columns=years, index=depts)
print(df)
#         2001  2002  2003
# food       3    23     8
# music     67    52    12
# sports    54    72    41

Вы также можете .swaplevel() в результирующую серию, если .swaplevel():

>>> df.stack().swaplevel().sort_values(ascending=False).nlargest(3)

2002  sports    72
2001  music     67
      sports    54

Ещё вопросы

Сообщество Overcoder
Наверх
Меню