У меня есть таблица значений частоты, например-
a b
1 3 0
2 0 3
3 4 5
, и я хочу вычислить tf_idf.
Мой код-
l=len(data)
for doc in data:
m=data.groupby(doc).apply(lambda column: column.sum()/(column != 0).sum())
for i in range(l):
tf=print(data.loc[i,doc])
idf=log(l/m)
weight=tf*idf
data.loc[i,doc]=weight
Пояснение- Сначала яя перебираю каждый столбец, где я нахожу ненулевые строки в этом столбце в var m, сохраняю конкретное значение этой строки в столбце как tf, а затем вычисляю tf_idf и заменяю значения в таблице весами tf_idf.
ожидаемый результат-
для первой строки столбца g мы имеем tf = 3 idf = log (5/4), поэтому tf_idf = idf * tf
a b
1 0.4 0
2 0 0.4
3 0.17 .22