Количество нет. токенов в каждой строке столбца в датафрейме - PullRequest
1 голос
/ 12 марта 2020

У меня есть датафрейм с данными в аналогичном формате

    song                    lyric                                tokenized_lyrics
0   Song 1  Look at her face, it's a wonderful face  [look , at , her ,face, it's a wonderful, face ]
1   Song 2  Some lyrics of the song taken            [Some, lyrics ,of, the, song, taken] 

Я хочу посчитать количество слов в тексте песни и выводить как

song     count
song 1     8
song 2     6

I попробовал агрегатную функцию, но это не дает правильного результата.

Код, который я пробовал:

df.groupby(['song']).agg(
word_count = pd.NamedAgg(column='text' , aggfunc = 'count' )
)

Как мне достичь желаемого результата

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Я не смог скопировать tokenized_lyrics в виде списка, он появился в виде строки, поэтому я разложил токены по тексту, предполагая, что разделитель - это пробел:

df['token_count'] = df.lyric.str.replace(',','').str.split().str.len()
df.filter(['song','token_count'])

    song    token_count
0   Song 1      8
1   Song 2      6

обратите внимание, что вы можете просто применить строка len к тексту песни, чтобы получить ваш счет, так как это список, он будет считать отдельные элементы

1 голос
/ 12 марта 2020

Используйте Series.str.len для значений счетчика и, если дублированы song значения, то агрегируйте sum:

df1 = (df.assign(count = df['tokenized_lyrics'].str.len())
         .groupby('song', as_index=False)['count'].sum())
...