панды: конкатить строки строк до заданных символов - PullRequest
0 голосов
/ 01 июля 2018

У меня есть один столбец данных. Строки этого столбца содержат диалог, который часто занимает несколько строк. В конце строки диалога каждого человека используется та же комбинация символов «& ,,», как показано ниже:

   Words
1  hello world! &,,
2  I woke up this morning and made some eggs.
3  They tasted good. &,,

Я хочу объединить каждую строку, не заканчивающуюся символом «& ,,», со следующей строкой, чтобы каждая строка говорила по-разному, а не имела несколько строк одного и того же абзаца. Это будет выглядеть так:

   Words
1  hello world! &,,
2  I woke up this morning and made some eggs. They tasted good. &,,

Каждый вопрос, который я видел, похожий на этот, включал в себя другой столбец, в котором была бы указана некоторая дополнительная информация, в моем примере это могло бы сказать, кто говорил, но для этого набора данных у меня его нет, и при этом у меня нет другого набора данных с более информация, все, что у меня есть, это разделители.

Ответы [ 2 ]

0 голосов
/ 01 июля 2018

Вы можете использовать df['Words'].str.endswith('&,,'), чтобы найти, какие строки заканчиваются на &,,, а затем использовать cumsum для генерации нужных номеров групп (хранится ниже в столбце row). Когда у вас есть эти номера групп, вы можете использовать pd.pivot_table для преобразования DataFrame в желаемую форму:

import sys
import pandas as pd
pd.options.display.max_colwidth = sys.maxsize

df = pd.DataFrame({
   'Words': ['hello world! &,,',
             'I woke up this morning and made some eggs.',
             'They tasted good. &,,']}, index=[1, 2, 3])

df['row'] = df['Words'].str.endswith('&,,').shift().fillna(0).cumsum() + 1
result = pd.pivot_table(df, index='row', values='Words', aggfunc=' '.join)
print(result)

выходы

                                                                Words
row                                                                  
1                                                    hello world! &,,
2    I woke up this morning and made some eggs. They tasted good. &,,
0 голосов
/ 01 июля 2018

Вы можете join свои значения и split в своем разделителе, чтобы воссоздать ваш фрейм данных:

df = pd.DataFrame(
    ''.join(df.Words.values)
    .split('&,,'), columns=['Words']
)

                                               Words
0                                      hello world!
1  I woke up this morning and made some eggs.They...
2

Это может привести к пустым значениям, если последний столбец заканчивается на &,,, но эти строки легко отфильтровать:

df.loc[df.Words.ne('')]

                                               Words
0                                      hello world!
1  I woke up this morning and made some eggs.They...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...