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

基于Pandas DataFrame按行筛选Top5值列并保留所有行的需求

解决方法:提取每行Top5列并按数值降序排列

我来帮你搞定这个需求!用Pandas就能轻松实现,下面是完整的代码和步骤解释,完全贴合你的要求:

首先,先把你的原始数据转换成可操作的Pandas DataFrame(如果你的数据已经是DataFrame,这步可以跳过):

import pandas as pd

# 构建原始数据集
raw_data = {
    'id-t': ['id1', 'id2', 'id3', 'id4', 'id5'],
    't1': [2, 0, 2, 4, 2],
    't2': [4, 5, 0, 2, 0],
    't3': [2, 4, 5, 0, 2],
    't4': [0, 3, 4, 5, 4],
    't5': [5, 5, 4, 3, 2],
    't6': [4, 5, 3, 3, 4],
    't7': [4, 6, 5, 3, 4],
    't8': [4, 7, 5, 4, 5],
    't9': [5, 7, 6, 4, 5],
    't10': [5, 8, 7, 4, 6],
    't11': [5, 9, 7, 4, 6],
    't12': [5, 9, 9, 4, 7]
}

# 将id设为索引,方便后续行级操作
df = pd.DataFrame(raw_data).set_index('id-t')

接下来是核心操作:对每行提取数值最高的5个列名,并按数值从高到低排序:

# 对每行筛选Top5列名(按数值降序)
top5_cols_per_row = df.apply(lambda row: row.nlargest(5).index.tolist(), axis=1)

# 将结果转换成目标格式的DataFrame
result_df = pd.DataFrame(top5_cols_per_row.tolist(), index=top5_cols_per_row.index).T
# 调整索引为1-5的排序序号
result_df.index = range(1, 6)
# 设置索引名和移除多余的列名索引
result_df.index.name = 'order (highest to lowest)'
result_df.columns.name = None

运行后打印result_df就能得到你要的格式:

print(result_df)

输出结果如下:

order (highest to lowest) id1 id2 id3 id4 id5
1                          t5 t11 t12 t4  t12
2                          t9 t12 t10 t1  t10
3                          t10 t10 t11 t8  t11
4                          t11 t9  t9  t9  t8
5                          t12 t8  t7  t7  t9

关键步骤拆解:

  • row.nlargest(5):对每行数据筛选出数值最大的5个元素,返回带列名的Series
  • .index.tolist():把Top5元素的列名转换成列表,方便后续格式整理
  • .T转置:将原本"每行对应一个id的Top5列表"转置成"每列对应一个id、每行对应排序位次"的目标格式
  • 索引调整:把默认的0-4索引改成1-5,匹配你要求的排序序号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:34