计算fvt选项卡的tfèidf

2024-04-23 08:13:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个频率值表,比如-

    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                    

Tags: 代码inlogfordatadoclentf
1条回答
网友
1楼 · 发布于 2024-04-23 08:13:57

输入数据帧:

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

相关问题 更多 >