#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:
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 указывает «каждую строку в порядке убывания»