如何对Pandas Series最后三行(含索引)排序?当前方法未改索引
问题解决:Pandas Series切片排序后保留索引对应关系
你遇到的核心问题是直接对切片赋值会触发Pandas的索引对齐机制——当执行df[1:] = df[1:].sort_values()时,右边排序后的Series会按索引匹配左边的切片位置,只会替换对应索引的值,不会改变索引的顺序。
要实现「保留第一行,对后三行的值和索引一起排序」的需求,正确做法是将前一部分和排序后的后一部分拼接,而非直接赋值切片:
步骤1:创建示例Series
import pandas as pd s = pd.Series([1, 4, 3, 2], index=['a', 'b', 'c', 'd'])
步骤2:拼接前一行与排序后的后三行
# 对后三行按值排序,再和第一行拼接 s = pd.concat([s[:1], s[1:].sort_values()])
执行后得到的结果:
a 1 d 2 c 3 b 4 dtype: int64
原理说明
s[1:].sort_values()返回一个按值排序、保留原索引对应关系的新Seriespd.concat()将第一行(s[:1])和排序后的后三行合并,生成的新Series会跟随排序后的部分更新索引顺序,完美保留值与索引的对应关系
如果需要按索引排序后三行,只需把sort_values()替换为sort_index()即可。
内容的提问来源于stack exchange,提问作者user2078621
相关产品推荐
相关产品推荐

