如何根据Pandas DataFrame每行的值确定列顺序并生成新列
实现方案
你原有代码报错的核心原因有3个:
sort_values()的by参数不支持直接传入行对象,语法不符合要求sort_values()默认返回新的DataFrame,不会修改原test_results对象,所以你拿到的列名永远是原始顺序- 直接遍历行的写法效率极低,数据量较大时性能会非常差
推荐实现代码
用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
相关产品推荐
相关产品推荐

