«Ранг» столбцов DataFrame на строку - PullRequest
1 голос
/ 10 апреля 2019

С учетом временного ряда DataFrame возможно ли создать новый DataFrame с теми же измерениями, но значения являются ранжированием для каждой строки по сравнению с другими столбцами (сначала упорядоченное наименьшее значение)?

Пример:

                 ABC      DEFG      HIJK       XYZ
date                                              
2018-01-14  0.110541  0.007615  0.063217  0.002543
2018-01-21  0.007012  0.042854  0.061271  0.007988
2018-01-28  0.085946  0.177466  0.046432  0.069297
2018-02-04  0.018278  0.065254  0.038972  0.027278
2018-02-11  0.071785  0.033603  0.075826  0.073270

Первая строка будет выглядеть следующим образом:

            ABC  DEFG  HIJK  XYZ
date                            
2018-01-14    4     2     3    1

, поскольку XYZ имеет наименьшее значение в этой строке и ABC наибольшее.

numpy.argsort похоже, что это может помочь, однако, поскольку оно выводит само местоположение, мне не удалось заставить его работать.

Многиеспасибо

1 Ответ

3 голосов
/ 10 апреля 2019

Используйте double argsort для rank на строки и передавайте в DataFrame конструктор:

df1 = pd.DataFrame(df.values.argsort().argsort() + 1, index=df.index, columns=df.columns)
print (df1)
            ABC  DEFG  HIJK  XYZ
date                            
2018-01-14    4     2     3    1
2018-01-21    1     3     4    2
2018-01-28    3     4     1    2
2018-02-04    1     4     3    2
2018-02-11    2     1     4    3

Или используйте DataFrame.rank с методом = 'density':

df1 = df.rank(axis=1, method='dense').astype(int)
print (df1)
            ABC  DEFG  HIJK  XYZ
date                            
2018-01-14    4     2     3    1
2018-01-21    1     3     4    2
2018-01-28    3     4     1    2
2018-02-04    1     4     3    2
2018-02-11    2     1     4    3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...