如何对包含空字段的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
解决方案
要实现这个排序,需要针对空字段设置优先级,结合多列的自定义排序规则:
- 先按
Name和time做基础分组排序,确保同组数据归类 - 给
Test列设置优先级:非空格值(如'K')排在空格值前面 - 给
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
相关产品推荐
相关产品推荐

