如何对含重复值的Pandas DataFrame按col1/col2交换规则排序?
Pandas DataFrame 互换排序逻辑解决方案
需求说明
需要对包含百万级行及额外列的Pandas DataFrame进行排序,实现col1与col2的排序逻辑互换,但不能直接交换列顺序。
原始数据构建
import pandas as pd # 构建col1数据 col1 = ['1M'] * 12 col11 = ['2M'] * 12 col111 = ['3M'] * 12 col1111 = ['4M'] * 12 final_col1 = col1 + col11 + col111 + col1111 # 构建col2数据 col2 = ['1M', '2M', '3M', '4M'] final_col2 = 12 * col2 # 生成DataFrame并添加模拟额外列 df1 = pd.DataFrame({ 'col1': final_col1, 'col2': final_col2, 'data': range(1, len(final_col1)+1) })
输入输出样例
输入(截取部分)
col1 col2 data 0 1M 1M 1 1 1M 2M 2 2 1M 3M 3 3 1M 4M 4 4 1M 1M 5 ... 12 2M 1M 13
输出(对应截取部分)
col1 col2 data 0 1M 1M 1 1 2M 1M 13 ...
高效排序解决方案
直接使用sort_values方法,指定排序优先级为col2优先、col1其次,即可实现排序逻辑互换,同时保留原有列顺序和所有数据,适合百万级大数据场景:
# 按col2、col1排序,实现逻辑互换 df_sorted = df1.sort_values(by=['col2', 'col1'], ignore_index=True)
原理说明
原数据默认排序逻辑为先按col1分组,组内按col2排序;通过sort_values(by=['col2', 'col1']),将排序逻辑改为先按col2分组,组内按col1排序,完美实现需求,且无需重构DataFrame,性能最优。
内容的提问来源于stack exchange,提问作者Macro Panda
相关产品推荐
相关产品推荐

