如何对DataFrame按重复doc_id分组并按tfidf值排序?
DataFrame分组后隐藏重复ID+组内TF-IDF排序解决方案
问题描述
原始DataFrame数据:
doc_id term_candidate tfidf 0 1240600489869402113 space 0.057618 1 1240600489869402113 capacity 0.057618 2 1240600489869402113 idea 0.057618 3 1340608455992815617 priority 0.064477 4 1340608455992815617 typical dates 0.064477 5 1340608455992815617 hope 0.064477
期望输出效果:分组后同一doc_id仅在首行显示,其余行留空,且每个组内按tfidf排序:
doc_id term_candidate tfidf 1240600489869402113 space 0.057618 capacity 0.057618 idea 0.057618 1340608455992815617 priority 0.064477 typical dates 0.064477 hope 0.064477
实现步骤
1. 组内按TF-IDF排序
先对DataFrame按doc_id分组,再对每组内的tfidf值排序(示例为降序,若需升序去掉ascending=False):
# 先排序:按doc_id升序,tfidf降序 df_sorted = df.sort_values(by=['doc_id', 'tfidf'], ascending=[True, False])
2. 隐藏重复的doc_id
创建副本,将同一组内重复的doc_id替换为空字符串,仅保留每组首行的ID:
df_formatted = df_sorted.copy() # 仅保留首次出现的doc_id,后续重复项设为空 df_formatted['doc_id'] = df_formatted['doc_id'].where(~df_formatted['doc_id'].duplicated(), '')
3. 格式化输出(保证列对齐)
使用to_string方法打印,去掉索引并保持列对齐:
print(df_formatted.to_string(index=False))
注意事项
- 该操作仅用于可视化展示,如果后续需要基于
doc_id做数据计算,不要修改原DataFrame,始终操作副本。 - 若
tfidf值相同,排序后顺序由原DataFrame的行序决定,可额外添加排序字段(如term_candidate)来控制顺序。
内容的提问来源于stack exchange,提问作者Omnia
相关产品推荐
相关产品推荐

