Pandas Dataframe: подсчитывать уникальные слова в столбце и возвращать счет в другом столбце - PullRequest
0 голосов
/ 12 июня 2018

У меня есть фрейм данных, который имеет следующие столбцы

  1. df ['Album'] (содержит названия альбомов artistX)
  2. df ['Tracks'] (содержит треки вальбомы исполнителяX)
  3. df ['Lyrics'] (содержит тексты песен)

Я пытаюсь подсчитать количество слов в df ['Lyrics'] ивернуть новый столбец с именем df ['wordcount'], а также подсчитать количество уникальных слов в df ['Lyrics'] и вернуть новый столбец с именем df ['uniquewordcount'].

Мне удалосьполучить df ['wordcount'], посчитав каждую строку в df ['lyrics'] минус пробел.

totalscore = df.Lyrics.str.count('[^\s]') #count every word in a track df['wordcount'] = totalscore df

Мне удалось посчитать уникальные слова в df ['Lyrics']

import collections
from collections import Counter

results = Counter()
count_unique = df.Lyrics.str.lower().str.split().apply(results.update)
unique_counts = sum((results).values())
df['uniquewordcount'] = unique_counts

И это дает мне счетчик всех уникальных слов в df [' Lyrics '], что и предназначается для кода, но я хочу, чтобы уникальные слова были в лирикеНа каждом треке мой Python не очень хорош в настоящее время, поэтому решение может быть очевидным для всех, но не для меня.Я хотел бы, чтобы кто-то указал мне правильное направление, как получить количество уникальных слов для каждого трека.

ожидаемый результат:

Album    Tracks    Lyrics                      wordcount  uniquewordcount
 A         Ball   Ball is life and Ball is key       7           5
           Pass   Pass me the hookah Pass me the     7           4

что я получил:

Album    Tracks    Lyrics                    wordcount  uniquewordcount
  A     Ball   Ball is life and Ball is key       7           9
        Pass   Pass me the hookah Pass me the     7           9

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Вот одно альтернативное решение:

import pandas as pd

df = pd.DataFrame({'Lyrics': ['This is some life some collection of words',
                              'Lyrics abound lyrics here there eveywhere',
                              'Come fly come fly away']})

# Split list into new series
lyrics = df['Lyrics'].str.lower().str.split()

# Get amount of unique words
df['LyricsCounter'] = lyrics.apply(set).apply(len)

# Get amount of words
df['LyricsWords'] = lyrics.apply(len)

print(df)

Возвращает:

                                       Lyrics  LyricsCounter  LyricsWords
0  This is some life some collection of words              7            8
1   Lyrics abound lyrics here there eveywhere              5            6
2                      Come fly come fly away              3            5
0 голосов
/ 12 июня 2018

Используя только стандартную библиотеку, вы действительно можете использовать collections.Counter.Тем не менее, рекомендуется ntlk, так как существует множество крайних случаев, которые могут вас заинтересовать, например, в пунктуации, множественном числе и т. Д.

Вот пошаговое руководство для Counter.Обратите внимание, что мы идем дальше, чем требуется, так как мы также вычисляем число каждого слова .Эти данные, хранящиеся в Counter словарях, отбрасываются, когда мы отбрасываем df['LyricsCounter'].

from collections import Counter

df = pd.DataFrame({'Lyrics': ['This is some life some collection of words',
                              'Lyrics abound lyrics here there eveywhere',
                              'Come fly come fly away']})

# convert to lowercase, split to list
df['LyricsList'] = df['Lyrics'].str.lower().str.split()

# for each set of lyrics, create a Counter dictionary
df['LyricsCounter'] = df['LyricsList'].apply(Counter)

# calculate length of list
df['LyricsWords'] = df['LyricsList'].apply(len)

# calculate number of Counter items for each set of lyrics
df['LyricsUniqueWords'] = df['LyricsCounter'].apply(len)

res = df.drop(['LyricsList', 'LyricsCounter'], axis=1)

print(res)

                                       Lyrics  LyricsWords  LyricsUniqueWords
0  This is some life some collection of words            8                  7
1   Lyrics abound lyrics here there eveywhere            6                  5
2                      Come fly come fly away            5                  3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...