Я пытаюсь возвратить по строкам две верхние записи по значению и нижнюю запись по значению в виде дополнительных столбцов или отдельного фрейма данных (либо, либо).
Допустим, у меня есть следующий массив данных значений:
example = pd.DataFrame({'a':[3, 8, 5, 3, 2, 1, 3],
'b':[6, 5, 8, 0, 3, 2, 1],
'c':[1, 4, 5, 3, 6, 2, 7],
'd':[4, 6, 5, 3, 9, 11, 3],
'e':[8, 0, 5, 2, 1, 1, 3]})
example
a b c d e
0 3 6 1 4 8
1 8 5 4 6 0
2 5 8 5 5 5
3 3 0 3 3 2
4 2 3 6 9 1
5 1 2 2 11 1
6 3 1 7 3 3
Так как я хочу найти верхние значения, я в конечном итоге ранжирую этот кадр данных по столбцам без повторения по рангу.
rank_df = example.rank(axis=1, method='first', ascending=False)
rank_df
a b c d e
0 4.0 2.0 5.0 3.0 1.0
1 1.0 3.0 4.0 2.0 5.0
2 2.0 1.0 3.0 4.0 5.0
3 1.0 5.0 2.0 3.0 4.0
4 4.0 3.0 2.0 1.0 5.0
5 4.0 2.0 3.0 1.0 5.0
6 2.0 5.0 1.0 3.0 4.0
Теперь, наконец, я хотел бы получить имена столбцов для рангов и вытащить в фрейм данных два верхних и нижний. Например, строка 0 имеет ранг 1 в столбце e, ранг 2 в столбце b и ранг 5 в столбце c, поэтому тремя столбцами будут e, b, c.
Ожидаемый результат:
top_1, top_2, bottom_1
0 e b c
1 a d e
2 b a e
3 a c b
4 d c e
5 d b e
6 c a b