Как получить доступ к элементам счетчика коллекций, которые хранятся в виде столбца в кадре данных для использования в CountVectorizer - PullRequest
1 голос
/ 14 апреля 2019

Один из столбцов в кадре данных имеет следующий формат

Row 1 : 
Counter({'First': 3, 'record': 2})
Row 2 : 
Counter({'Second': 2, 'record': 1}).

Я хочу создать новый столбец со следующим значением:

Row 1 :
First First First record record
Row 2 : 
Second Second record

Ответы [ 2 ]

1 голос
/ 14 апреля 2019

Я смог решить вопрос самостоятельно с помощью следующего кода.Это очень сильно связано с регулярным выражением.

def transform_word_count(text):
    words = re.findall(r'\'(.+?)\'',text)
    n = re.findall(r"[0-9]",text)
    result = []
    for i in range(len(words)):
        for j in range(int(n[i])):
            result.append(words[i])
    return result

df['new'] = df.apply(lambda row: transform_word_count(row['old']), axis=1)
1 голос
/ 14 апреля 2019

Используйте apply со значениями counter и объединяйте с пробелом - сначала повторяющиеся значения, а затем вместе:

import ast

#convert values to dictionaries
df['col'] = df['col'].str.extract('\((.+)\)', expand=False).apply(ast.literal_eval)

df['new'] = df['col'].apply(lambda x: ' '.join(' '.join([k] * v) for k, v in x.items()))
print (df)
                          col                              new
0   {'First': 3, 'record': 2}  First First First record record
1  {'Second': 2, 'record': 1}             Second Second record

Или составление списка:

df['new'] = [' '.join(' '.join([k] * v) for k, v in x.items()) for x in df['col']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...