如何根据索引提取DataFrame数据并合并排序生成目标列表?
问题
我有如下DataFrame:
| idx | val1 | val2 |
|---|---|---|
| 0 | 15 | 12 |
| 1 | 14 | 38 |
| 2 | 11 | 88 |
| 3 | 95 | 21 |
| 4 | 19 | 98 |
| 5 | 12 | 48 |
| 6 | 35 | 38 |
| 7 | 25 | 39 |
| 8 | 65 | 28 |
已定义两个索引列表:
list1 = [0, 3, 6] list2 = [5, 8]
需要实现:从list1的索引提取val1列数据,从list2的索引提取val2列数据,将所有提取的数据按原索引升序排列后组成目标列表,预期输出:
output = [15, 95, 48, 35, 28]
解决方案
分步实现代码
import pandas as pd # 构建示例DataFrame df = pd.DataFrame({ 'val1': [15,14,11,95,19,12,35,25,65], 'val2': [12,38,88,21,98,48,38,39,28] }) list1 = [0, 3, 6] list2 = [5, 8] # 收集(原索引, 对应值)的元组 data_with_index = [] for idx in list1: data_with_index.append((idx, df.loc[idx, 'val1'])) for idx in list2: data_with_index.append((idx, df.loc[idx, 'val2'])) # 按原索引排序后提取数值 output = [value for idx, value in sorted(data_with_index, key=lambda x: x[0])] print(output) # 输出: [15, 95, 48, 35, 28]
简化写法
用列表推导式合并收集步骤,代码更紧凑:
data_with_index = [(i, df.loc[i, 'val1']) for i in list1] + [(i, df.loc[i, 'val2']) for i in list2] output = [v for _, v in sorted(data_with_index)]
原理说明
- 核心思路是将每个提取的值和它的原索引绑定,避免排序时丢失对应关系
- 通过
sorted()按原索引升序排列所有数据对 - 最后从排序后的元组中提取数值部分,得到目标列表
内容的提问来源于stack exchange,提问作者mshah
相关产品推荐
相关产品推荐

