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

如何按指定序列排列Pandas DataFrame且保留原有索引?

问题分析

你当前代码的核心问题是:data.loc[sequenceList]是按索引值选取行,但sequenceList存储的是Flight列的数值,而非DataFrame默认的索引(0-5)。这不仅会导致行选取逻辑错误,还会直接将结果的索引替换为sequenceList中的数值,完全不符合你“按序列排列但保留原索引”的需求。

修正方案

以下两种方法都能实现按sequenceList的Flight值顺序排列DataFrame,同时保留原始索引:

方案一:通过Flight值映射原索引排序

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'Flight':[1,2,3,4,5,6],
    'Country':['Laos','US','UK','Aus','Sing','Malay'],
})
sequenceList = np.random.permutation(data['Flight'].values.tolist())

# 建立Flight值到原索引的映射关系
flight_to_index = {flight: idx for idx, flight in data['Flight'].items()}
# 将sequenceList转换为对应的原索引序列
target_indices = [flight_to_index[flight] for flight in sequenceList]
# 按目标索引取行,保留原索引
sorted_data = data.loc[target_indices]

执行后sorted_data的行顺序完全匹配sequenceList的Flight值顺序,且每行的索引仍为原DataFrame的默认索引(0-5)。

方案二:利用辅助表指定排序顺序

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'Flight':[1,2,3,4,5,6],
    'Country':['Laos','US','UK','Aus','Sing','Malay'],
})
sequenceList = np.random.permutation(data['Flight'].values.tolist())

# 创建带排序权重的辅助表
order_helper = pd.DataFrame({'Flight': sequenceList, 'sort_order': range(len(sequenceList))})
# 合并原数据与辅助表,按权重排序后恢复原索引
sorted_data = pd.merge(data.reset_index(), order_helper, on='Flight') \
                .sort_values('sort_order') \
                .set_index('index') \
                .rename_axis(None) \
                .drop('sort_order', axis=1)

这种方法通过给每个Flight值分配唯一的排序权重,合并后按权重排序,最后恢复原索引,逻辑更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:17:05