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

如何根据Pandas DataFrame每行的值确定列顺序并生成新列

实现方案

你原有代码报错的核心原因有3个:

  1. sort_values()的by参数不支持直接传入行对象,语法不符合要求
  2. sort_values()默认返回新的DataFrame,不会修改原test_results对象,所以你拿到的列名永远是原始顺序
  3. 直接遍历行的写法效率极低,数据量较大时性能会非常差

推荐实现代码

用apply逐行处理的写法简洁高效,示例如下:

import pandas as pd

# 适用场景:test_results索引为学生姓名,所有列均为需要排序的科目分数列
test_results['Additional column'] = test_results.apply(
    lambda row: ', '.join(row.sort_values(ascending=False).index), 
    axis=1
)

如果你的DataFrame里还有其他非数值列不需要参与排序,可以先筛选出分数列再处理:

# 先指定需要参与排序的科目列
score_cols = ['Math', 'Eng', 'Sci', 'Law', 'Econ']
test_results['Additional column'] = test_results[score_cols].apply(
    lambda row: ', '.join(row.sort_values(ascending=False).index), 
    axis=1
)

原有循环写法的修正版(仅做参考,不推荐使用)

如果你一定要用循环的方式实现,可以修改为以下代码:

new_column = [] 
for i in range(len(test_results)):
    # 取出当前行排序后拼接列名
    sorted_cols = test_results.loc[i].sort_values(ascending=False).index.tolist()
    new_column.append(', '.join(sorted_cols))
# 将生成的列插入原DataFrame
test_results['Additional column'] = new_column

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:30:03