Как отсортировать значения в линейчатом графике в порядке убывания из фрейма данных pandas

#python #pandas

#python #pandas

Вопрос:

В настоящее время у меня есть фрейм данных, подобный этому:

  category     name1      name2     name3     name4
    a          4           34       43         34
    b          5           34       31         523 
    c          234         32        4         12  
    d          34          1        13         19
  

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

В настоящее время я строю свои подзаголовки следующим образом:

  df.plot(kind='bar', subplots=True, layout=(2,10), figsize=(10,10))
  

Как я могу отсортировать текущие гистограммы в порядке убывания.

Дайте мне знать, если у вас возникнут какие-либо вопросы. Спасибо

Ответ №1:

sort_values

 df = pd.DataFrame({
    'category': ['a', 'b', 'c', 'd'],
    'name1': [12, 34, 1234, 78],
    'name2': [473, 16, 8891, 73],
    'name3': [768, 521, 521, 1002],
    'name4': [823, 6742, 5934, 37]
})

  category  name1  name2  name3  name4
0        a     12    473    768    823
1        b     34     16    521   6742
2        c   1234   8891    521   5934
3        d     78     73   1002     37


df.sort_values(by=['name1'])

  category  name1  name2  name3  name4
0        a     12    473    768    823
1        b     34     16    521   6742
3        d     78     73   1002     37
2        c   1234   8891    521   5934

df.sort_values(by=['name1'], ascending=False)

  category  name1  name2  name3  name4
2        c   1234   8891    521   5934
3        d     78     73   1002     37
1        b     34     16    521   6742
0        a     12    473    768    823

df.sort_values(by=['name3', 'name2'], ascending=False)

  category  name1  name2  name3  name4
3        d     78     73   1002     37
0        a     12    473    768    823
2        c   1234   8891    521   5934
1        b     34     16    521   6742
  

Итак, в зависимости от того, по какому столбцу вы хотите выполнить сортировку:

 df.sort_values(
    by=['name1'], ascending=False).plot(
    kind='bar', subplots=True, layout=(2,10), figsize=(10,10))
  

Комментарии:

1. ascending также принимает списки в качестве входных данных для сортировки каждого столбца по-разному. Например. df.sort_values(by=['name3', 'name2'], ascending=[True, False])

Ответ №2:

Я надеюсь, что следующий пример может проиллюстрировать, как вы можете достичь этого, используя panda ‘s sort_values

 import pandas as pd
import numpy as np

df = pd.DataFrame({
     'category' : ['a', 'b', 'c', 'd'],
     'name1': [4, 34, 43, 34],
     'name2': [5, 34, 31, 523],
     'name3': [234, 32, 4, 12],
     'name4': [34, 1, 13, 19],
})

df2 = df.sort_values(by=['name1'])

print(df2)
  

Вывод этого кода:

   category  name1  name2  name3  name4
0        a      4      5    234     34
1        b     34     34     32      1
3        d     34    523     12     19
2        c     43     31      4     13
  

Ответ №3:

Для сортировки каждой строки в порядке убывания используйте np.sort() :

 df=df.set_index('category') #if category is already an index skip this
df=pd.DataFrame(abs(np.sort(-df,axis=1)),columns=df.columns,index=df.index)
print(df)
  

           name1  name2  name3  name4
category                            
a            43     34     34      4
b           523     34     31      5
c           234     32     12      4
d            34     19     13      1
  

Комментарии:

1. downvoter хочет расширить? причина моего ответа в том, что OP указывает «каждую строку в порядке убывания»