Панды - Как суммировать предложения в столбце на основе условий в других столбцах и сохранять полученные документы в списке - PullRequest
1 голос
/ 11 июля 2019

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

Для иллюстрации у меня есть фрейм данных:

df = pd.DataFrame(np.array([['28/02/2017', 'Apple', "A"], ['28/02/2017', 'Apple', "B"], ['30/03/2017', 'Apple', "C"],
                            ['30/03/2017', 'Apple', "D"],  ['30/02/2017', 'Amazon', "E"]]),
                columns=['date', 'company', 'text'])

Мой желаемый вывод - список со следующими предложениями:

documents = ["AB", "CD", "E"]

До сих пор я думал о создании столбца "groups", который бы назначал номер группы для комбинации компании и даты. Основываясь на номере группы, я мог бы суммировать текст.

Я попытался создать функцию, которая присваивала бы эти номера групп:

def label_groups(x, count):
    if x['date'] == x['company']:
        return count
    else:
        count = count+1

df['group'] = df.apply(lambda x: label_groups(x, 0), axis=1)

Но это не работает (он возвращает «None» для каждой строки).

Возможно, это излишне сложный подход, и есть гораздо более простой способ достичь желаемого результата?

1 Ответ

1 голос
/ 11 июля 2019

Вы можете groupby в обоих столбцах и агрегировать с join:

l = df.groupby(['date', 'company'], sort=False).text.agg(''.join).values.tolist()

print(l)
# ['AB', 'E', 'CD']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...