Примените регулярное выражение к DataFrame после группировки, чтобы отфильтровать значения в столбце. - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть DataFrame, который выглядит следующим образом

            text   row
0     string1111  14.0
1     string1234  14.0
2     strin1gabc  12.0
3  anotherstring  12.0
4          12351  15.0

Я пытаюсь сгруппировать по row и объединить text для каждого row, а затем удалить все числа из объединенных text , Я добился успеха в этой группе, однако не уверен, как применить регулярное выражение для удаления чисел из результирующего кадра данных.

Приведенный ниже код возвращает нефильтрованный кадр данных

x = df.groupby(['row'], as_index=False).agg({'text': ' '.join})

. желаемый результат - это что-то похожее на это

        text                   row
0     string string            14.0
1     stringabc anotherstirng  12.0

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

1 Ответ

1 голос
/ 27 февраля 2020

Используйте DataFrame.assign для замены столбца значениями без чисел, затем агрегирования, изменения порядка столбцов и последнего удаления строк, заполненных пустыми строками, путем преобразования столбца в bool:

x = (df.assign(text = df['text'].str.replace('\d', ''))
       .groupby('row', sort=False)['text']
       .agg( ' '.join)
       .reset_index()[['text','row']]
       .loc[lambda x: x['text'].astype(bool)])
print (x)
                      text   row
0            string string  14.0
1  stringabc anotherstring  12.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...