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

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
1
Vincent 14 Апр 2019 в 08:36

2 ответа

Лучший ответ

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

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
Vincent 14 Апр 2019 в 06:45

Используйте apply со значениями iter 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']]
1
jezrael 14 Апр 2019 в 06:47