为 fvt table 计算 tf_idf

calculating tf_idf for fvt table

我有一个频率值table喜欢-

    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 并替换 [=31 中的值=] 具有 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                    

输入数据帧:

df
    a   b
0   3   0
1   0   3
2   4   5

首先,找到所有单词中的idf个,

idf_list = []
for col in list(df.columns):
    total_count = df[col].nonzero()[0][1]
    idf = np.log(len(df) / total_count)
    idf_list.append(round(idf, 3))

现在,找到 tf-idf 并更新数据框,

for row in range(len(df)):
    total_doc_words = sum(df.iloc[row].values)
    for col in range(len(df.columns)):
        tf = df.iloc[row, col] / total_doc_words
        df.iloc[row, col] = tf * idf_list[col]

输出:

df
       a    b
0   0.405   0.000
1   0.000   0.405
2   0.180   0.225