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

如何基于列内元素序列逐行比较重排Pandas DataFrame的列

问题背景

现有如下Pandas DataFrame:

import pandas as pd
df = pd.DataFrame(data = {'a':[3,0,2,1],'b':[4,3,2,1],'c':[3,2,1,0],'d':[4,3,2,0]})
print(df)

输出结果:

a  b  c  d
0  3  4  3  4
1  0  3  2  3
2  2  2  1  2
3  1  1  0  0

需要对DataFrame的列进行重排:比较两列时逐行依次对比数值,首行数值相同则继续比较下一行,数值更大的列优先排在前面。例如元素为[3,2,1]的列要排在[3,2,0]的列之前,最终期望得到如下结果:

b  d  c  a
0  4  4  3  3
1  3  3  2  0
2  2  2  1  2
3  1  0  0  1
解决方案

利用Python元组的逐元素比较特性即可实现需求,代码如下:

import pandas as pd
df = pd.DataFrame(data = {'a':[3,0,2,1],'b':[4,3,2,1],'c':[3,2,1,0],'d':[4,3,2,0]})

# 按列的数值元组降序排序列名
sorted_columns = sorted(df.columns, key=lambda col: tuple(df[col]), reverse=True)
# 重新生成排序后的DataFrame
dd = df[sorted_columns]
print(dd)

原理说明

  • Python中的元组会逐元素依次比较,正好匹配题目中"首行相同则比较下一行"的规则。比如列b的数值元组是(4,3,2,1),列d的数值元组是(4,3,2,0),前三个元素相同,第四个元素1>0,所以b排在d前面。
  • sorted函数通过key参数指定排序依据为列的数值元组,reverse=True让数值更大的列排在前面,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:32:22