Я относительно новичок в кадрах данных python и pandas, поэтому, возможно, я пропустил что-то очень простое здесь. Итак, у меня был кадр данных со многими строками и столбцами, но в конце, наконец, удалось получить только одну строку с максимальным значением из каждого столбца. Я использовал этот код, чтобы сделать это:Как отсортировать данные по значениям столбцов?
import pandas as pd
d = {'A' : [1.2, 2, 4, 6],
'B' : [2, 8, 10, 12],
'C' : [5, 3, 4, 5],
'D' : [3.5, 9, 1, 11],
'E' : [5, 8, 7.5, 3],
'F' : [8.8, 4, 3, 2]}
df = pd.DataFrame(d, index=['a', 'b', 'c', 'd'])
print df
Out:
A B C D E F
a 1.2 2 5 3.5 5.0 8.8
b 2.0 8 3 9.0 8.0 4.0
c 4.0 10 4 1.0 7.5 3.0
d 6.0 12 5 11.0 3.0 2.0
Затем выбрать максимальное значение из каждого столбца я использовал эту функцию:
def sorted(s, num):
tmp = s.order(ascending=False)[:num]
tmp.index = range(num)
return tmp
NewDF=df.apply(lambda x: sorted(x, 1))
print NewDF
Out:
A B C D E F
0 6.0 12 5 11.0 8.0 8.8
Да, я потерял строки метки (индексы любой другой), но в этом столбце метки более важно для меня сохранить. Теперь мне просто нужно сортировать столбцы мне нужно топ 5 столбцов на основе значений внутри них, мне нужен этот вывод:
Out:
B D F E A
0 12.0 11 8.8 8.0 6.0
Я искал решение, но не повезло. Лучшее, что я нашел для сортировки по столбцам, это печать NewDF.sort (ось = 1), но ничего не происходит.
Edit: Ok, я нашел один способ, но с преобразованием:
transposed = NewDF.T
print(transposed.sort([0], ascending=False))
Является ли это единственно возможный способ сделать это?
Ммм, я, кажется, нашел решение без транспозиции. Plese check edit. – jezrael
Ничего себе так просто! Большое спасибо! –
Спасибо за эту ссылку также :) Я думал, стрелка вверх, все, что я могу сделать, чтобы подтвердить, что ответ хороший, теперь я нажал также знак Accept. Еще раз спасибо jezrael –