Функция, которая будет возвращать индекс 3 самых высоких записей записей в каждом столбце в кадре данных - PullRequest
0 голосов
/ 23 октября 2019

Если у меня есть следующий фрейм данных

           Base Pay   Overtime Pay    Other Pay   Benefits   
Adam        200000       31000          5000       64000
Ben         210000       27000          7000       57000
Scott       190000       40000          9000       65000
David       220000       26000          4000       61000
Matthew     195000       29000         10000       63000
Mark        205000       37000          8000       59000

Тогда я хочу вернуть следующий фрейм данных

                     1st      2nd     3rd
Base Pay            David    Ben     Mark
Overtime Pay        Scott    Mark     Adam  
Other Pay          Matthew  Scott     Mark
Benefits            Scott    Adam    Matthew

Я знаю, как вычислить 3 самых больших значения в каждом столбце, ноне одновременно.

Ответы [ 3 ]

3 голосов
/ 23 октября 2019

Использование argsort:

df = pd.DataFrame(...).T

result = pd.DataFrame(df.columns[(-df.values).argsort(axis=1)[:, :3]],
                      columns=["1st","2nd","3rd"],
                      index=df.index)

print (result)

#
                 1st    2nd      3rd
BasePay        David    Ben     Mark
OvertimePay    Scott   Mark     Adam
OtherPay     Matthew  Scott     Mark
Benefits       Scott   Adam  Matthew
2 голосов
/ 23 октября 2019

немного короче:

df = df.T.apply(lambda s: s.abs().nlargest(3).index.tolist(), axis=1)
>>> df2 = pd.DataFrame()
>>> df2[['1st','2nd','3rd']] = pd.DataFrame(df.values.tolist(), index= df.index)
1 голос
/ 23 октября 2019

Вот один из способов

s=df.stack().sort_values(ascending=False).groupby(level=1).head(3).reset_index()
s['Id']=s.groupby('level_1').cumcount()+1
s.pivot(index='level_1',columns='Id',values='level_0')
Out[114]: 
Id                 1      2        3
level_1                             
BasePay        David    Ben     Mark
Benefits       Scott   Adam  Matthew
OtherPay     Matthew  Scott     Mark
OvertimePay    Scott   Mark     Adam
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...