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

如何实现Pandas DataFrame的多列条件排序(A列升序,B列按C列值动态切换排序方式)

解决方案:按条件对Pandas DataFrame进行多列排序

针对你提出的排序需求,我们可以通过生成条件排序键的方式来实现:A列始终升序,B列根据C列的值动态调整排序方向('x'时升序,'y'时降序)。下面提供两种高效的实现方式:

方法一:使用apply生成逐行排序键

这种方法逻辑直观,适合理解基础原理:

import pandas as pd

# 初始化原始DataFrame
df = pd.DataFrame({'A': [100, 100, 300, 200, 200, 200], 
                   'B': [60, 55, 12, 32, 15, 44], 
                   'C': ['x', 'x', 'y', 'y', 'y', 'y']})

# 创建辅助排序键:C为'x'时用B原值,C为'y'时用-B(实现降序效果)
df['sort_key'] = df.apply(lambda row: row['B'] if row['C'] == 'x' else -row['B'], axis=1)

# 按A升序、sort_key升序排序,最后删除辅助列
df_sorted = df.sort_values(by=['A', 'sort_key'], ascending=[True, True]).drop('sort_key', axis=1)

# 输出结果
print(df_sorted)

方法二:使用numpy.where向量化生成排序键(推荐)

如果你的DataFrame数据量较大,推荐用向量化操作替代逐行apply,效率会更高:

import pandas as pd
import numpy as np

# 初始化原始DataFrame
df = pd.DataFrame({'A': [100, 100, 300, 200, 200, 200], 
                   'B': [60, 55, 12, 32, 15, 44], 
                   'C': ['x', 'x', 'y', 'y', 'y', 'y']})

# 向量化生成排序键,逻辑和方法一一致
sort_key = np.where(df['C'] == 'x', df['B'], -df['B'])

# 临时添加排序键、排序、删除键一气呵成
df_sorted = df.assign(sort_key=sort_key).sort_values(by=['A', 'sort_key'], ascending=[True, True]).drop('sort_key', axis=1)

# 输出结果
print(df_sorted)

验证结果

两种方法运行后都会得到你想要的目标DataFrame:

A   B  C
1  100  55  x
0  100  60  x
5  200  44  y
3  200  32  y
4  200  15  y
2  300  12  y

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 06:03:11