Сортировать pandas фрейм данных по индексу - PullRequest
0 голосов
/ 28 марта 2020

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

    Cmpd1   Cmpd2   Cmpd3   Cmpd4   Cmpd5   Cmpd6
Cmpd1   1                   
Cmpd2   0.4   1             
Cmpd3   0.6   0.3   1           
Cmpd4   0.46  0.69  0.32    1       
Cmpd5   0.57  0.44  0.41    0.51    1   
Cmpd6   0.41  0.79  0.33    0.56    0.43    1

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

Максимальное значение соответствует Cmpd6 = 0,79, за которым следует Cmpd4 = 0,69 ... в какой-то момент Cmpd6 = 0,56, который я хотел бы оставить в списке следующим образом:

Cmpd6 = 0.79
Cmpd4 = 0.69
Cmpdx = x
Cmpd6 = 0.56

This с каждым значением массива, независимо от того, сколько раз индексы повторяются, я пытался с .sort_index (axis = 1), но он ничего не дает, я также пытался .ravel (), но он не дает мне индексы. Как я могу это исправить?

Спасибо!

Мое решение:

df = df.where(np.tril(np.ones(df.shape), -1).astype(np.bool))
df = df.stack().reset_index().drop("level_1", axis=1).sort_values(by=0, ascending=False)

1 Ответ

0 голосов
/ 28 марта 2020

Я предполагаю, что каждый пустой элемент в источнике df содержит фактически пустую строку (не NaN , так как они будут напечатаны как NaN ).

Я также заметил, что вы хотите использовать только значения <1 </em>.

Чтобы получить свой результат, выполните:

s = df.stack()
s[s.apply(lambda x: type(x) is not str and x < 1)]\
    .reset_index(level=1, drop=True).sort_values(ascending=False)\
    .astype(float)

Для ваших данных результат:

Cmpd6    0.79
Cmpd4    0.69
Cmpd3    0.60
Cmpd5    0.57
Cmpd6    0.56
Cmpd5    0.51
Cmpd4    0.46
Cmpd5    0.44
Cmpd6    0.43
Cmpd6    0.41
Cmpd5    0.41
Cmpd2    0.40
Cmpd6    0.33
Cmpd4    0.32
Cmpd3    0.30
dtype: float64

Другое возможное решение:

s = df.replace(r'^\s*$', np.nan, regex=True).stack()\
    .reset_index(level=1, drop=True).sort_values(ascending=False)
s[s < 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...