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

Python如何根据列值列表筛选pandas DataFrame对应列条目

pandas按指定列值匹配提取对应内容的实现方法

pandas内置的isin()方法、索引映射逻辑都可以直接实现这个需求,都是原生向量化实现,处理大型DataFrame时性能远高于手写循环。

首先先构造和你示例一致的测试数据:

import pandas as pd

df = pd.DataFrame({
    'name': ['Hana', 'Fred', 'Ben', 'Lisa'],
    'city': ['NYC', 'London', 'Paris', 'Berlin'],
    'number': [23, 12, 90, 3]
})
numbers = [3, 12, 23]

根据你对结果顺序的要求,可以选两种实现方式:

  • 不需要匹配目标列表的顺序,只要返回所有符合条件的name:直接用isin()做布尔筛选即可,结果会保留原DataFrame的行顺序
names = df[df['number'].isin(numbers)]['name'].tolist()
# 运行结果:['Hana', 'Fred', 'Lisa']
  • 需要严格和目标numbers列表的顺序对应,得到你期望的['Lisa', 'Fred', 'Hana']结果:用列值设为索引做映射即可,这也是大型数据集下最高效的顺序匹配方案
# 生成number到name的映射关系
number_to_name = df.set_index('number')['name']
# 按目标列表的顺序直接取值
names = number_to_name[numbers].tolist()
# 运行结果:['Lisa', 'Fred', 'Hana']

注意:如果你的number列存在重复值,用索引映射前可以先通过df.drop_duplicates(subset='number', keep='last')指定重复值的保留规则,避免结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:21:41