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

如何按指定列表顺序匹配pandas DataFrame某列并取出对应另一列的值

问题根源

你现有代码的问题在于:isin()方法仅负责筛选出符合条件的行,返回结果默认遵循DataFrame原本的行顺序,不会匹配你传入的列表li的自定义排序规则,因此无法得到预期输出。

实现方案

方案1:set_index + reindex 极简实现(推荐,适合column2无重复值场景)

直接将column2设为索引后,按照li的顺序重排索引,再提取column1的值即可:

import numpy as np
import pandas as pd

# 示例数据
df = pd.DataFrame({'column1': ['A', 'B', 'C'], 'column2': ['h', 'l', 'p']})
li = ['p', 'l']

# 核心代码
result = df.set_index('column2').reindex(li)['column1'].values

运行后result的值就是你需要的np.array(['C', 'B'])。如果li中存在column2没有的取值,可在reindex后加.dropna()过滤空值。

方案2:自定义排序映射(兼容column2有重复值、旧版本pandas场景)

先给列表li里的每个元素生成顺序优先级,筛选匹配行后按照优先级排序再取值:

# 生成顺序映射字典
order_map = {val: idx for idx, val in enumerate(li)}
# 筛选+排序+取值
result = df[df['column2'].isin(li)]\
         .assign(sort_order = df['column2'].map(order_map))\
         .sort_values('sort_order')['column1'].values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 00:36:09