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

如何对包含空字段的Pandas DataFrame进行自定义排序?

Pandas DataFrame 自定义排序实现

原始数据

用户提供的DataFrame定义:

import pandas as pd

data = {'Test': [' ', ' ', 'K', ],
        'Name': ['A', 'B', 'B', 'B'],
        'value': ['D1', 'A1', ' ', 'C1'],
        'time': [227, 227, 227, 230]}
df = pd.DataFrame(data)

原始DataFrame内容:

Test Name value  time
0        A    D1    227
1        B    A1    227
2   K    B          227
3        B    C1    230

期望排序结果

Test Name value  time
0        A    D1    227
1   K    B          227
2        B    A1    227
3        B    C1    230

解决方案

要实现这个排序,需要针对空字段设置优先级,结合多列的自定义排序规则:

  1. 先按Name和time做基础分组排序,确保同组数据归类
  2. 给Test列设置优先级:非空格值(如'K')排在空格值前面
  3. 给value列设置优先级:空格值排在非空值前面

代码实现:

# 创建排序辅助列
df['test_sort'] = df['Test'] != ' '  # 非空格标记为True,排序时优先
df['value_sort'] = df['value'] == ' '  # 空格标记为True,排序时优先

# 执行多条件排序
sorted_df = df.sort_values(
    by=['Name', 'time', 'test_sort', 'value_sort'],
    ascending=[True, True, False, False]
).drop(columns=['test_sort', 'value_sort'])

# 重置索引并输出
print(sorted_df.reset_index(drop=True))

执行后输出与期望结果一致:

Test Name value  time
0        A    D1    227
1   K    B          227
2        B    A1    227
3        B    C1    230

规则说明

  • test_sort列:通过布尔值区分Test列的空格/非空格,降序排序让非空格行靠前
  • value_sort列:通过布尔值区分value列的空格/非空格,降序排序让空格行靠前
  • 最后删除辅助列,得到目标结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:22:09