У меня есть панда данных, продаж по отделам по годам:
department 2001 2002 2003 ...
Food 1300 1444 1573 ...
Music 1370 1244 1173 ...
Я хочу найти 10 наивысших значений по всему набору данных, а также посмотреть, какой отдел и год для каждого.
Есть ли способ, которым я могу найти оба одновременно? Я знаю, как получить наивысшее значение в каждой строке (idxmax
) и каждом столбце (idxmax(axis=1)
), но я не знаю, как искать весь фрейм данных.
Вы можете использовать что-то вроде этого (простой случай 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