Pandas使用Groupby拼接列并获取每组最大值对应target_text的方法
Pandas分组聚合实现指定需求方案
核心实现代码
import pandas as pd # 分组处理逻辑 def handle_group(group): # 计算当前组最高分 max_score = group["score"].max() # 取最高分对应的target(若有多个同分最高可调整此处逻辑取全部) top_target = group[group["score"] == max_score]["target_text"].iloc[0] # 拼接target,最高分自动加HTML加粗标签 joined_target = "<br />".join([ f"<b>{text}</b>" if text == top_target else text for text in group["target_text"] ]) return pd.Series({ "target_text": joined_target, "score": max_score, "top": top_target }) # 按prefix、input_text分组聚合得到结果 result_df = df.groupby(["prefix", "input_text"], as_index=False).apply(handle_group).reset_index(drop=True)
逻辑说明
- 直接通过
groupby.apply一次性生成所有需求字段,无需额外执行去重操作,效率和可读性更高 - 拼接时保留了你需要的
<br />作为分隔符,最高分对应的target_text自动包裹<b>标签,渲染HTML时会自动加粗 - 若同一分组存在多个同分最高的
target_text,只需调整top_target取值逻辑,将所有最高分对应的文本纳入加粗范围即可
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

