Сортировка столбцов pandas
Всем привет! Изучаю pandas и никак не могу решить одну проблему
Есть DataFrame, который содержит 2 колонки, в котором нужная мне информация разделена между собой пустыми ячейками
Вот пример:
A B 0 NaN NaN 1 NaN NaN 2 H 1.0 3 G 2.0 4 F 3.0 5 E 4.0 6 D 5.0 7 C 6.0 8 B 7.0 9 NaN NaN 10 NaN NaN 11 NaN NaN 12 O 1.0 13 N 2.0 14 M 3.0 15 L 4.0 16 K 5.0 17 J 6.0 18 I 7.0 19 NaN NaN 20 NaN NaN 21 NaN NaN 22 O 1.0 23 NaN NaN 24 NaN NaN 25 NaN NaN 26 Q 1.0 27 P 2.0 28 NaN NaN 29 NaN NaN 30 V 1.0 31 U 2.0 32 T 3.0 33 NaN NaN
Я ищу способ, с помощью которого я смогу определить те строки, которые находятся после и до пустых ячеек и отдельно отсортировать их в алфавитном порядке
Вот что я пытаюсь сделать на основе первого примера:
A B 0 NaN NaN 1 NaN NaN 2 B 7.0 3 C 6.0 4 D 5.0 5 E 4.0 6 F 3.0 7 G 2.0 8 H 1.0 9 NaN NaN 10 NaN NaN 11 NaN NaN 12 I 7.0 13 J 6.0 14 K 5.0 15 L 4.0 16 M 3.0 17 N 2.0 18 O 1.0 19 NaN NaN 20 NaN NaN 21 NaN NaN 22 O 1.0 23 NaN NaN 24 NaN NaN 25 NaN NaN 26 P 2.0 27 Q 1.0 28 NaN NaN 29 NaN NaN 30 T 3.0 31 U 2.0 32 V 1.0 33 NaN NaN
И после этого я смогу удалить пустые ячейки с помощью df.dropna() и получить желаемый результат
До и после частей почти всегда разное количество пустых ячеек, сами эти части тоже содержать рандомное кол-во строк. Я пытался как-то это решить, но ничего не придумал)
Надеюсь я правильно и доступно объяснил и заранее спасибо за ответ!
Ответ:
Сделать новую колонку, поместить туда что-то вроде:
df['group'] = -df['A'].isna().cumsum()
После этого сортировать по нужным колонкам, включив эту колонку с группой на первое место, чтобы по нужным колонкам сортировка шла уже внутри группы между NA, а не глобально:
df = df.sort_values(['group', 'B'], ascending=False)