Поиск и возврат строк внизу в python фрейме данных и транспонирование - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть информационный фрейм с текстом, извлеченным онлайн в каждой строке, который содержит информацию о спортивном отборе (все в одном столбце). Я пытаюсь транспонировать данные таким образом:

print(df): 
    Col A    

    Random text sentence
    Random text sentence 
    Random text sentence

    Race 1 - Handicap
    14 - NAME
    3  - NAME
    5  - NAME
    6  - NAME
    Race Overview: lorem ipsum etc etc
     
    Race 2 - Sprint
    12 - NAME
    10 - NAME
    8 - NAME
    11 - NAME
    Race Overview: Second lorem ipsum etc etc
 

Становится:

Race Name             | Selection No    | Selection    | Race Overview

Race 1 - Handicap     |  1              |  14 - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  2              |  3  - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  3              |  5  - Name   | Race Overview: lorem ipsum etc etc
Race 1 - Handicap     |  4              |  6  - Name   | Race Overview: lorem ipsum etc etc
Race 2 - Sprint       |  1              |  12 - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  2              |  10 - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  3              |  8  - Name   | Race Overview: Second lorem ipsum etc etc
Race 2 - Sprint       |  4              |  11 - Name   | Race Overview: Second lorem ipsum etc etc

Я думаю, что его функция al oop ищет ключевое слово (строка начинается с Race ) и затем переставляя 5 строк внизу. Текст всегда указывается ниже в последующих 5 строках. Любая помощь или направление к некоторым ресурсам было бы здорово! Спасибо

1 Ответ

0 голосов
/ 12 апреля 2020

Если ваши данные повторяются каждые 6 строк в фиксированном шаблоне, вы можете сделать что-то вроде:

(
    pd.DataFrame(data = df['Col A'].values.reshape(-1, 6))
    .set_index([0, 5])
    .stack()
    .rename_axis(index=['Race Name','Race Overview','Selection No'])
    .to_frame('Selection')
    .reset_index()
)

Это даст вам следующие результаты:

    Race Name           Race Overview                               Selection No    Selection
0   Race 1 - Handicap   Race Overview: lorem ipsum etc etc          1               14 - NAME
1   Race 1 - Handicap   Race Overview: lorem ipsum etc etc          2               3 - NAME
2   Race 1 - Handicap   Race Overview: lorem ipsum etc etc          3               5 - NAME
3   Race 1 - Handicap   Race Overview: lorem ipsum etc etc          4               6 - NAME
4   Race 2 - Sprint     Race Overview: Second lorem ipsum etc etc   1               12 - NAME
5   Race 2 - Sprint     Race Overview: Second lorem ipsum etc etc   2               10 - NAME
6   Race 2 - Sprint     Race Overview: Second lorem ipsum etc etc   3               8 - NAME
7   Race 2 - Sprint     Race Overview: Second lorem ipsum etc etc   4               11 - NAME
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...