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

使用.sort_values()仅排序DataFrame指定列不影响其他列的问题

问题:仅排序DataFrame指定列,保留其他列原有顺序

问题描述

需要对DataFrame的Uno列单独排序,同时保持Dos和Tres列的原始数据顺序。尝试直接赋值排序后的Uno列未成功,但使用sort_values()对整个DataFrame排序(如示例中的df2)是正常的。

原代码:

import pandas as pd

list_of_dicts_2 = {"Uno":[4,3,6,2,1,5], "Dos": [3,5,7,8,12,4],"Tres": [9,8,6,5,3,1]}
df2= pd.DataFrame(list_of_dicts_2)
print("SECOND DF")
print(df2)
df2= df2.sort_values(by = ["Uno"])
print(df2)
#To do this, alterate the order of all columns.
df3= pd.DataFrame(list_of_dicts_2)
print("THIRD DF")
print(df3)
df3["Uno"]= df3["Uno"].sort_values()
print(df3)

期望输出对应的DataFrame结构:

list_of_dicts_answer = {"Uno":[1,2,3,4,5,6], "Dos": [3,5,7,8,12,4],"Tres": [9,8,6,5,3,1]}

问题原因

直接使用df3["Uno"].sort_values()返回的是带原索引的排序后Series,赋值时Pandas会根据索引匹配到原DataFrame的对应行,而不是直接覆盖为排序后的顺序,导致最终Uno列的顺序不符合预期。

解决方案

提取排序后的Uno列的纯数值列表,再赋值给原列,这样就能忽略索引,直接替换成排序后的顺序:

import pandas as pd

list_of_dicts_2 = {"Uno":[4,3,6,2,1,5], "Dos": [3,5,7,8,12,4],"Tres": [9,8,6,5,3,1]}
df3 = pd.DataFrame(list_of_dicts_2)
# 提取排序后的值列表进行赋值
df3["Uno"] = df3["Uno"].sort_values().tolist()
# 或者用.values获取numpy数组再转列表
# df3["Uno"] = df3["Uno"].sort_values().values.tolist()
print(df3)

运行后输出的df3就会符合期望:Uno列排序为[1,2,3,4,5,6],Dos和Tres列保持原始顺序不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 22:36:17