Подсчитайте частоту слова в токенизированном слове - с помощью логики else if - PullRequest
2 голосов
/ 08 апреля 2019

Я пытаюсь подсчитать частоту слов - это список в кадре данных.

data = {'H':[['the', 'brown', 'fox'], ['the', 'weather', 'is'],['she', 'sells', 'sea']], 'marks':['a', 'b', 'c']} 
df = pd.DataFrame(data)   

Я хочу разделить количество слов на основе меток a, b, c.Я знаю, что могу создать x3 отдельных фрейма данных, но я ищу более чистый вывод кода

freq = {}
  def count_freq(word):
     for w in word:
         if w in list(freq.keys()):
            freq[w] += 1
      else:
        freq[w] = 1

df.H.apply(count_freq)

, затем я попробовал это, но я испортил

df['marks'] = z.apply(lambda row: 0 if row['marks'] in ("a")
             else if row['marks'] in ("b")
             else row['marks'] in ("c")

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

            Frequency-a   Frequency-b    Frequency-c    
the         1              1
quick       1
brown       1
fox         1
she                                       1
sells                                     1
sea                                       1
weather                    1
is                         1

Ответы [ 3 ]

2 голосов
/ 08 апреля 2019

С sklearn MultiLabelBinarizer

from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer()
print (pd.DataFrame(mlb.fit_transform(df['H'].values),columns=mlb.classes_, index=df.marks).T)
marks    a  b  c
brown    1  0  0
fox      1  0  0
is       0  1  0
sea      0  0  1
sells    0  0  1
she      0  0  1
the      1  1  0
weather  0  1  0
2 голосов
/ 08 апреля 2019

Вы можете unnest с crosstab:

u = unnesting(df, 'H')
pd.crosstab(u.H, u.marks)

marks    a  b  c
H
brown    1  0  0
fox      1  0  0
is       0  1  0
sea      0  0  1
sells    0  0  1
she      0  0  1
the      1  1  0
weather  0  1  0
2 голосов
/ 08 апреля 2019

Вы можете использовать get_dummies и транспонировать результат:

df['H'].str.join(',').str.get_dummies(sep=',').set_index(df['marks']).T

marks    a  b  c
brown    1  0  0
fox      1  0  0
is       0  1  0
sea      0  0  1
sells    0  0  1
she      0  0  1
the      1  1  0
weather  0  1  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...