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
相关产品推荐
相关产品推荐

