You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按条件对DataFrame分组内评分Top N的词进行转换?

实现对每组评论中评分Top N的词应用转换函数

问题背景

现有一个包含评论分词及对应评分的pandas DataFrame,按review_num分组代表同一条评论的不同分词。当前代码仅能对每组中评分最高的单个词应用转换函数,需要修改为对每组内评分Top N的词都执行转换(例如n=2时,对每组前2个高分词添加后缀"E")。

原始数据

import pandas as pd

df = pd.DataFrame({
    "review_num": [2,2,2,1,1,1,1,1,3,3],
    "review": ["The second review", "The second review", "The second review",
               "This is the first review", "This is the first review",
               "This is the first review", "This is the first review",
               "This is the first review",'Not Noo', 'Not Noo'],
    "token_num":[1,2,3,1,2,3,4,5,1,2],
    "token":["The", "second", "review", "This", "is", "the", "first", "review", "Not", "Noo"],
    "score":[0.3,-0.6,0.4,0.5,0.6,0.7,-0.6,0.4,0.5,0.6]
})

当前代码局限

现有代码仅处理每组评分最高的单个词,生成的结果如下:

review_num                    review           Modified_review
2           2         The second review        The second reviewE
5           1  This is the first review  This is theE first review
9           3                   Not Noo                    Not NooE

预期效果(n=2时)

需要对每组Top 2高分词应用转换,得到:

review_num                    review              Modified_review
2           2         The second review          TheE second reviewE
5           1  This is the first review   This isE theE first review
9           3                   Not Noo                    NotE NooE

解决方案

核心思路:

  • 按review_num分组,对每组内的score降序排序,取前N个词
  • 对每条原始评论,依次替换这Top N个词为转换后的形式
  • 最终生成包含原评论和修改后评论的DataFrame

实现代码

import pandas as pd

def modify_word(w):
    return w + "E"  # 自定义转换函数,可按需修改

def process_top_n_words(df, n=2):
    # 按review_num分组,每组按score降序排序,取前n个token
    top_n_tokens = df.groupby("review_num", sort=False).apply(
        lambda x: x.sort_values("score", ascending=False).head(n)["token"].tolist()
    ).reset_index(name="top_tokens")
    
    # 获取每条评论的原始内容(每组取第一条即可,因为同组review内容一致)
    original_reviews = df.groupby("review_num", sort=False).first()[["review"]].reset_index()
    
    # 合并原始评论和Top N词列表
    merged = original_reviews.merge(top_n_tokens, on="review_num")
    
    # 生成修改后的评论:依次替换每个Top N词
    merged["Modified_review"] = merged["review"]
    for i in range(n):
        merged["Modified_review"] = merged.apply(
            lambda row: row["Modified_review"].replace(row["top_tokens"][i], modify_word(row["top_tokens"][i])),
            axis=1
        )
    
    # 整理最终结果
    result = merged[["review_num", "review", "Modified_review"]]
    return result

# 调用函数,n=2时的结果
Modified_df = process_top_n_words(df, n=2)
print(Modified_df)

运行结果

review_num                    review              Modified_review
0           2         The second review          TheE second reviewE
1           1  This is the first review   This isE theE first review
2           3                   Not Noo                    NotE NooE

内容的提问来源于stack exchange,提问作者SLA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:23:23